赛欧3,轻量级RPC框架harpc,佛罗伦萨

根据Thrift的跨言语、高可用、高功能、轻量级的RPC结构。

功用介绍

  • 跨言语通讯
  • 便利的使Java、Python、C++三种程序能够彼此通讯
  • 负载均衡和容灾处理
  • 便利的完成使命的分布式处理
  • 支撑服务的水平扩展,主动发现新的服务节点
  • 能够兼容各种反常情况,如节点的反常down机
  • 可视化办理
  • 经过服务办理体系能够便利检查服务状况和计算信息
  • 与原生thrift通讯
  • 支撑与原生thrift服务进行通讯

与业界计划的比照

  • 与thrift、avro、hessian比较,harpc支撑了高可用,而且愈加易用
  • 与dubbo比较,harpc支撑了跨言语,而且更轻量级
  • 与ice比较,harpc功能更高,而且更轻量级

规划思路

HARPC的中心思维是高可用,那么在确保高可用的基础上,还需要具有跨言语、高功能、可视化及轻量级等特性。所以,咱们在规划之初就挑选了根据 thrift开发的计划,底层通讯运用thrift来确保高功能和跨言语金利来,然后HARPC来确保高可用和可视化,而且尽量坚持简略,来到达轻量级的需求。

  • 全体结构

* 阐明
* 四个部分:client(客户端)、server(服务端)、registry(注册中心,目前为zookeeper集群)、青菜的做法admin(服务办理体系)
* client和server又包括: your code(用户代码)、harpc(中心结构,包括Java、Python、C++三个版别)、thrift gen(thrift生成的源码文件,用于底层通讯)

Java版别依靠

  • 挑选最新的harpc的安稳版别,拜见Tags
  • 引荐运用maven工程增加相关依靠
  • pom中增加harpc依靠,直接在pom中增加如下依靠(已上传至中心库房)

com.baifendian
harpc
1.2

运用过程

(1) thrift 文件界说

#赛欧3,轻量级RPC结构harpc,佛罗伦萨 file: demo.thrift
namespace java com.bfd.harpc.demo.gen
service EchoService {
string echo(1: string msg);
}

(2) thrift --gen java demo.thrift

将生成的gen-java文件夹下的文件拷贝到maven工程的src/main/java目录下 留意: Thrift程序的版别主张运用0.9.2及以上

(3) 项目目录结构

src/main/java
├── com
│ ├── bfd
│ ├── harpc
│ ├── demo
│ ├──换肤大师 ServerDemo.java 白云苍狗 #服务端
│ ├── ClientDemo.java #客户端
│ ├── EchoServiceImpl.java #接口完成类
│ ├── gen #thrift生成文件
│ ├── EchoService.java
src/main/resources
├─赛欧3,轻量级RPC结构harpc,佛罗伦萨─ server.赛欧3,轻量级RPC结构harpc,佛罗伦萨properties #server装备文件
├── client.properties #client装备文件
pom.xm黄山市民网l

(4) Server端装备

#fil赶牛阿旗e:server.properties
#zookeeper衔接字符串
registry.connectstr = 172.18.1.22:2181,172.18.1.23:2181,172.18.1.24:2181
#四亿名牌女授权字符串,格局为:用户名:暗码
registry.auth = admin:admi硝苯地平n123
#zookeeper会话超时时刻,单位ms
registry.timeout = 3000
#服务名(全称):命名空间$服务名简称
server.service = com.bfd.harpc.demo$EchoService
#服务端口
server.port = 19090
#服务名
server.name = harpc-demo-server
#服务负责人
server.owner = dongsheng.fan@baifendian厨师.com
#是否发徽州古城送计算信息到zk
server.monitor = true
#发送的时刻距离,单位为s
server.interval = 60
#......

(5) Server代码示例

String[] configs = new String[] { "classpath:server.properties" 泰国时刻}; // 装备文件途径
EchoServiceImpl impl = new EchoServiceImpl();
try {
Server server = new Server(configs, impl);
server.start(); // 发动服务,非堵塞
// 堵塞主线程
synchronized (ServerDemo.class) {
while (running) {
try {
ServerDemo.class.wait();
} catch (InterruptedException e) {
e.服部平次printSt赛欧3,轻量级RPC结构harpc,佛罗伦萨ackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}

(6) Client端装备

#file:client.properties
#zookeeper衔接字符串
registry.connectstr = 172.18.1.22:2181,172.18.赛欧3,轻量级RPC结构harpc,佛罗伦萨1.23:2181,172.18.1.24:2181
#zookeeper会话超时时刻,单位ms
registry.timeout = 3000
#直连到不同的server,多个server以分号隔儿童房装饰效果图开(若装备address,则运用直连方法)
#client.address=172.18.1.22:19090;172.18.1.23能量层级高清图:19090
#服务名
client.name = harpc-demo-client
#服务负责人
client.owner = dongsheng.fan@baifendian.com
#服务名(全称):命名空间$服务名简称
client.service = com.bfd.harpc.demo$EchoService
#thri赛欧3,轻量级RPC结构harpc,佛罗伦萨ft生成文件的Iface接口
client.iface = com.bfd.harpc.demo.gen.EchoService$Iface
#client到server的超时时刻,单位为ms
client.timeout = 10000
#重试次数
client.retry = 谷宜成1
#.....赛欧3,轻量级RPC结构harpc,佛罗伦萨.

(7) Client代码示例

String[] confi兔兔gs = new String[] { "classpath:client.properties" };
try {
Client client = new Client(configs);
// 留意:署理内部现已运用衔接池,所以这儿只需要创立一个实例,多线程同享
// 特别情况下,能够答应创立多个实例,但禁止每次调用前都创立一个实例
Iface ech维生素b族oIface = client.createProxy();
for (int开缸养水全程图文记载 i = 0; i < 1000; i++) {
try {
System.out.println(echoIface.echo("world"));
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Excepti怎么瘦大腿on e) {
e.printStackTrace();
}

评论(0)