java thrift连接池_高可用的池化 Thrift Client 实现(源码分享)

20180110221255758525.png

本文将分享一个高可用的池化 Thrift Client 及其源码实现,欢迎阅读源码(Github)并使用,同时欢迎提出宝贵的意见和建议,本人将持续完善。

本文的主要目标读者是对 Thrift 有一定了解并使用的童鞋,如对 Thrift 的基础知识了解不多或者想重温一下基础知识,推荐先阅读本站文章《和 Thrift 的一场美丽邂逅》。

下面进入正题。

为什么我们需要这么一个组件?

我们知道,Thrift 是一个 RPC 框架体系,可以非常方便的进行跨语言 RPC 服务的开发和调用。然而,它并没有提供针对多个 Server 的 Smart Client【1】。比如,你有一个服务 service,分别部署在 116.31.1.1 和 116.31.1.2 两台服务器上,当你需要从 Client 端调用该 service 的某个远程方法的时候,你只能在代码中显式指定使用 116.31.1.1 或者 116.31.1.2 其中的一个。这种情况下,你调用的时候无法预知所指定 IP 对应的服务是否可用,并且当该服务不可用时,无法隐式自动切换到调用另外一个 IP 对应的服务。也就是说,服务的状态对你并不是透明的,并且无法做到服务的负载均衡和高可用。

此外,当你调用远程方法时,每次你都得新建一个连接,当请求量很大时,不断的创建、删除连接所耗费的服务资源是巨大的。

因此,我们需要这么一个组件,使服务状态透明化并底层实现负载均衡和高可用,让你可以专注于业务逻辑的实现,提升工作效率和服务的质量。下面我们就对该组件(ThrifJ)进行详细的剖析。

它到底能做些什么?

特性

链式调用API,简洁直观

完善的默认配置,无需担心调用时配置不全导致抛错

池化连接对象,高效管理连接的生命周期

异常服务自动隔离与恢复

多种可配置的负载均衡策略,支持随机、轮询、权重和哈希

多种可配置的服务级别,并自动根据服务级别进行服务降级

该如何使用它?

目前最新版本为1.0.1(点此关注最新版本的更新),首先在项目中引入 thriftj-1.0.1.jar,或在 Maven 依赖中加入:

com.github.cyfonly

thriftj

1.0.1

需要注意的是,ThriftJ 基于 slf4j 构建,因此你需要在项目中增加具体日志实现的依赖,比如 log4j 或 logback。

然后在项目中,参照以下这段代码进行调用:

//Thrift server 列表

private static final String servers = "127.0.0.1:10001,127.0.0.1:10002";

//TTransport 验证器

ConnectionValidator validator = new ConnectionValidator() {

@Override

public boolean isValid(TTransport object) {

return object.isOpen();

}

};

//连接对象池配置

GenericKeyedObjectPoolConfig poolConfig = new GenericKeyedObjectPoolConfig();

//failover 策略

FailoverStrategy failoverStrategy = new FailoverStrategy();

//构造 ThriftClient 对象并配置

final ThriftClient thriftClient = new ThriftClient();

thriftClient.servers(servers)

.loadBalance(Constant.LoadBalance.RANDOM)

.connectionValidator(validator)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值