架构
二级架构
hsf 生产者启动流程
hsf 消费者启动流程
hsf 调用流程
hsf 服务的调用是通过服务提供者与服务消费者点对点实现的
服务提供者(provider)会向 地址注册中心(configServer)去注册地址,同时在本地启动 nettyTcpServer 开启端口监听,等待远程服务来调用;
服务消费者(consumer)向地址注册中心订阅地址;
持久化配置中心(diamond),会配置服务的治理规则:路由,权重
服务消费者同时会向持久化配置中心订阅服务治理规则
服务消费者拿到服务提供者信息和服务路由规则后,就可以通过动态代理创建远程服务的本地代理,然后通过代理对象去调用,底层把要调用的参数封装为 java 对象,然后序列化为字节流后,通过 nettyTcpClient 去调用服务端的 nettyTcpServer, server 端反序列化为 java 对象,调用本地服务后,序列化为字节流后返回 client 端。
detail
- 编解码器继承的是 ByteToMessageCodec 类,可以同时做编码和解码;业务的 handler 继承的是 ChannelDuplexHandler 类, 可以同时读写数据;handler 里面添加了 IdleStateHandler,可以通过在 handler里重写 userEventTriggered 方法做心跳发送、接收、超时处理逻辑;
调用方式
客户端主要用在远程服务执行完之后,返回结果时的回调。
一个应用会大量的调用多个服务,而且也是高并发的,而且调用的过程是需要网络IO的,一般来说IO比较耗时,并且是异步的。所以一般客户调用两种方式:
同步调用(阻塞)(这种一般不用)
同步调用(不阻塞)
异步回调
参考: 阿里中间件团队博客