架构

1530968304843-1bdee891-4710-4a72-836c-829234b1434e.png

二级架构

1530968371485-cc16865f-5b1c-4d99-a466-c83f0be3dc72.png

hsf 生产者启动流程

20170518235858371.png

hsf 消费者启动流程

20170518235937266.png

hsf 调用流程

hsf 服务的调用是通过服务提供者与服务消费者点对点实现的

  1. 服务提供者(provider)会向 地址注册中心(configServer)去注册地址,同时在本地启动 nettyTcpServer 开启端口监听,等待远程服务来调用;

  2. 服务消费者(consumer)向地址注册中心订阅地址;

  3. 持久化配置中心(diamond),会配置服务的治理规则:路由,权重

  4. 服务消费者同时会向持久化配置中心订阅服务治理规则

  5. 服务消费者拿到服务提供者信息和服务路由规则后,就可以通过动态代理创建远程服务的本地代理,然后通过代理对象去调用,底层把要调用的参数封装为 java 对象,然后序列化为字节流后,通过 nettyTcpClient 去调用服务端的 nettyTcpServer, server 端反序列化为 java 对象,调用本地服务后,序列化为字节流后返回 client 端。

detail

  1. 编解码器继承的是 ByteToMessageCodec 类,可以同时做编码和解码;业务的 handler 继承的是 ChannelDuplexHandler 类, 可以同时读写数据;handler 里面添加了 IdleStateHandler,可以通过在 handler里重写 userEventTriggered 方法做心跳发送、接收、超时处理逻辑;

调用方式

客户端主要用在远程服务执行完之后,返回结果时的回调。
一个应用会大量的调用多个服务,而且也是高并发的,而且调用的过程是需要网络IO的,一般来说IO比较耗时,并且是异步的。所以一般客户调用两种方式:
同步调用(阻塞)(这种一般不用)
HSF 学习 - 图5
步调用(不阻塞)
HSF 学习 - 图6

异步回调
HSF 学习 - 图7

参考: 阿里中间件团队博客