使用Thrifty客户端 - endink/Thrifty GitHub Wiki

如何使用Thrifty客户端

当Thrifty服务发布后,可以直接进行服务调用。分为三个步骤:

1、定义服务

2、初始化服务

3、进行调用

定义服务

定义服务分为三种场景:

1、同为C#项目,并且服务提供方提供了服务定义的dll文件。直接引用服务提供方提供的dll文件即可。

2、对方没有提供对应的dll或者为其他语言定义的服务(如java),则需要服务提供方提交给服务适用方相应的数据结构、方法定义。

(1)定义数据结构

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

(2)定义服务接口

    [ThriftService("scribe")] //定义服务名为scribe
    public interface IService
    {
        [ThriftMethod("Log")] //定义暴露的方法名为Log
        void Log(List<LogEntry> messages);
    }

3、提供了IDL文件(IDL生成器将在后续版本推出)

调用服务

1、如果服务提供方使用了完整的微服务框架,基于Eureka提供了服务的高可用、负载均衡,则服务使用方需要提供相应的Eureka配置进行负载均衡调用:

    var factory = new LoggerFactory();
    using (var client = new ThriftyClient(new ThriftyClientOptions
            {
                LoggerFactory = factory,
                ConnectionPoolEnabled = true,
                Eureka = new ThriftyClientEurekaConfig
                {
                    EurekaServerServiceUrls = "http://10.66.30.95:8761/eureka"  //指定Eureka的URL
                }
            }))
    {
        var service = client.Create(typeof(IService), "0.0.1", "TestApp") as IService; //初始化接口实例时需要指定对方注册时提供的接口版本号、服务VIP
        service.Log(new List<LogEntry>()); //进行服务调用
    }

这种调用模式下服务提供者的具体IP、端口都由Eureka提供,在Thrifty框架中我们集成了服务健康检查、负载均衡,使用者可以直接进行服务调用。

2、如果服务提供方并未使用Eureka进行负载均衡,而是使用了单点或者基于F5、nginx这样的代理负载均衡的话,我们也能够直接进行直连

    var factory = new LoggerFactory();
    using (var client = new ThriftyClient(new ThriftyClientOptions
            {
                LoggerFactory = factory,
                ConnectionPoolEnabled = true
            }))
    {
        var service = client.Create(typeof(IService), "127.0.0.1:9999") as IService; //创建服务实例时,指定对方的IP、端口
        service.Log(new List<LogEntry>()); //进行服务调用
    }
⚠️ **GitHub.com Fallback** ⚠️