服务提供者需要通过配置、注解、API调用等方式,把本地接口发布成远程服务;对于消费者,可以通过对等的方式引用远程服务提供者,实现服务的发布和引用
一.服务发布设计

1.服务发布的方式
- XML配置方式
- 注解方式
- API调用方式
2.本地实现类封装成代理
对于服务提供者,将本地实现类封装成代理对象不是必需的。但是采用动态代理有如下好处:
- 不管什么服务,他们的发布流程都是相似的,通过抽象代理层,可以对服务发布行为本身进行封装和抽象。
- 通过代理对象:可以对服务发布进行动态拦截,方便平台和业务对服务发布进行个性化定制;
- 便于扩展和替换;
3.服务发布成指定协议
根据服务配置的属性信息,将服务发不成指定协议。同一个服务可以发不成多种协议。
4.服务提供者信息注册

将服务按照指定协议发布之后,需要将服务发布信息注册到注册中心,服务注册的目的有两个:
- 供消费者订阅服务地址信息进行服务路由
- 基于服务注册中心的统一服务治理
二.服务引用设计

1.本地接口调用转换成远程服务调用
消费这导入服务提供者的本地API之后,在配置文件中引用远程服务提供者,即可实现远程服务调用。
其原理是:根据导入的服务提供者接口API和服务引用信息,生成远程服务的本地动态代理对象;它负责将本地的API调用转换成远程服务调用,然后将结果返回给调用者。
2.服务地址本地缓存

3.远程服务调用
消费者从本地缓存的服务列表中按照指定的策略路由,将请求消息封装成协议消息;调用相关协议的客户端将请求发送到服务提供者,业务线程按照服务调用方式选择同步等待或者注册监听器回调。
协议客户端读取到应答消息,将数据报解码成协议应答消息;再根据序列化格式将消息体序列化成业务POJO对象,唤醒业务等待的线程。业务线程获得服务调用结果返回。

网友评论