Skip to content

使用Thrifty创建Service

Anders Xiao edited this page Dec 1, 2017 · 1 revision

如何使用Thrifty创建Service

Struct 结构体

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; }
    }

Thrifty 服务发布

基于现有约定,服务发布时我们需要定义服务接口和服务实现: 定义服务接口:

    [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 参数来显式制定方法名。。