-
Notifications
You must be signed in to change notification settings - Fork 21
使用Thrifty创建Service
Anders Xiao edited this page Dec 1, 2017
·
1 revision
Thrift 是一种基于流的数据传输协议,它与Json并不相同,在数据传输过程中并不传输数据结构中的属性名,属性基于属性序号传输,基于Thrifty的远程服务可以简单地通过Attribute定义数据结构,它分为两个步骤:
1、声明数据结构
2、声明属性序号
[ThriftStruct]
public class LogEntry
{
[ThriftConstructor]
public LogEntry([ThriftField(1)]String category, [ThriftField(2)]String message)
{
this.Category = category;
this.Message = message;
}
[ThriftField(1)]
public String Category { get; }
[ThriftField(2)]
public String Message { get; }
}
基于现有约定,服务发布时我们需要定义服务接口和服务实现: 定义服务接口:
[ThriftService("scribe")] //定义服务名为scribe
public interface IService
{
[ThriftMethod("Log")] //定义暴露的方法名为Log
ResultCode Log(List<LogEntry> messages);
}
实现服务接口:
public Service : IService
{
private readonly List<LogEntry> messages = new List<LogEntry>();
public List<LogEntry> GetMessages()
{
return messages;
}
public ResultCode Log(List<LogEntry> messages)
{
this.messages.AddRange(messages);
return ResultCode.OK;
}
}
这样即成功定义了IService服务,暴露于Thrifty Server。
最佳实践:
1、将(Interface+struct)与实现放置于不同的程序集中,当项目发布后可以将Interface程序集单独分发于调用方使用。
2、Thrift协议不支持方法重载,即同一个接口中不允许出现相同的方法名,如果方法重名,请使用 ThriftMethodAttribute 的 name 参数来显式制定方法名。。