使用Thrifty客户端 - endink/Thrifty GitHub Wiki
当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>()); //进行服务调用
}