采用Zookeeper作为注册中心,记录服务提供者IP端口信息.
客户端读取Zookeeper上已注册的服务提供方信息.
服务器与客户端采用 Netty 通讯.
序列化方式为TProtocol项层协议为:TProtocol| 4bytes | 1byte | 1byte | 1byte | 4bytes | header | body | 1byte | 
|---|---|---|---|---|---|---|---|
| 包长度 | 起始标记固定 0x02 | 版本号固定1 | 协议 | 序列号 | 头部 | 正文 | 结束标志固定0x03 | 
| 编号 | 协议类型 | 编码值 | 
|---|---|---|
| 1 | 二进制 | 0 | 
| 2 | 压缩二进制 | 1 | 
| 3 | JSON | 2 | 
| 4 | XML | 3 | 
| 序号 | 字段名称 | 数据类型 | 说明 | 例子 | 
|---|---|---|---|---|
| 1 | serviceName | String | 服务名称 | |
| 2 | methodName | String | 方法名称 | |
| 3 | versionName | String | 版本号 | |
| 4 | sessionTid | Optional | 服务会话ID,在服务调用中会一直蔓延 本次服务调用引发的所有服务调用 | |
| 5 | userId | Optional | 服务会话发起人Id,特指前台用户 | |
| 6 | userIp | Optional | 服务会话发起人Ip | |
| 7 | operatorId | Optional | 服务发起操作人Id,特指后台用户 | |
| 8 | callerTid | Optional | ||
| 9 | timeout | Optional | 超时时间 | |
| 10 | callerMid | Optional | 调用源 | |
| 11 | callerIp | Optional | 调用者IP | |
| 12 | callerPort | Optional | 调用者商口,只有在大鹏框架内才需要这个值 | |
| 13 | respCode | Option | 响应返回码 | |
| 14 | respMessage | Option | 响应返回信息 | |
| 15 | calleeTid | Optional | ||
| 16 | calleeIp | Optional | ||
| 17 | calleePort | Optional | ||
| 18 | calleeMid | Optional | ||
| 19 | calleeTime1 | Optional | 服务提供方消耗时间 (从接收到请求 到 发送响应),单位毫秒 | |
| 20 | calleeTime2 | Optional | 服务提供方消耗时间 (从开始处理请求到处理请求完成),单位毫秒 | |
| 21 | transactionId | Optional | 全局事务ID | |
| 22 | transactionSequence | Option | 当前过程所属序例号 | |
| 23 | cookies | Map<String,String> | 备用字段 | 以备后续使用 | 
|--soa//主目录
|  |--config//配置信息
|  |  |--routes//路由
|  |  |  |--service.name.with.package.name
|  |  |--services//服务列表
|  |  |  |--service.name.with.package.name
|  |--runtime//运行时信息
|  |  |--services//运行时服务列表
|  |  |  |--service.name.with.package.name//服务名称
|  |  |  |  |--ip.port.version:sequenceid//服务实例String serviceName = "com.github.dapeng.soa.service.PrintService";
String version = "1.0.0";
ServiceLoader<SoaConnectionPoolFactory> factories = ServiceLoader.load(SoaConnectionPoolFactory.class,getClass().getClassLoader());
SoaConnectionPool pool = factories.iterator().next().getPool();
SoaConnectionPool.ClientInfo clientInfo = this.pool.registerClientInfo(serviceName,version);
String methodName = "print";
print_args print_args = new print_args();
print_result response = pool.send(serviceName,version,"print",print_args, new Print_argsSerializer(), new Print_resultSerializer());服务治理关键点:
    1.网络IO模型.
    2.通讯协议
    3.注册中心
    4.负载均衡
    5.使用方法
    6.监控
    7.MOCK
    8.原文:https://www.cnblogs.com/hhbk/p/9546666.html