一起写RPC框架(九)RPC服务提供端一--服务端的基本代码结构
2016-10-19 14:39
453 查看
本节介绍Provider端代码的搭建,工欲善其事必先利其器,Provider端的代码结构很重要,写代码的时候,我们需要知道我们自己要干嘛,好了,废话不多说,先写一个接口,接口是明确自己要干什么的利器,写个接口压压惊~
Provider.java
DefaultProvider.java 这边就不贴完整的代码了,代码可以去本小节的底部的Github的链接,我们看看基本的代码结构
对上图做一个简单的说明:
1)它需要作为Client去连接注册中心和监控中心,这个有一个NettyClient就可以了,毕竟对这边的性能要求不是很高
2)需要有两个NettyServer,都是等待消息消费者的连接,一个做普通服务用,另一个做VIP服务用,做个约定默认的VIP提供的端口是普通端口-2
3) 再说ProviderRegistryController和ProviderRPCController,因为我们知道Provider的主要功能就是分2块,一个是注册服务,一个是提供服务,所以将这两块代码写在单独的两个模块里,方便代码的管理和业务模块化,不至于代码很乱很脏
4)两个ExcutorService线程执行器就不做介绍了,这边可能后面需要优化
5)publishRemotingTransporters这个就是需要发送给注册中心的编织好的服务类
6)globalPublishService是一个Map,放在这边方便给监控中心和其他功能的使用
7)registryAddress注册中心的地址,需要用户提供
8)exposePort本地暴露的端口
9)监控中心的地址,也需要用户提供,当然不是一定需要的
10)要提供的服务obj,这是强依赖的,这太重要了,没他就没得玩了~
11)ProvierStateIsHealthy 服务提供者的状态信息,因为假如注册中心宕机重启之后,可能之前注册的信息就丢失了,所以需要重新注册,这时候的服务状态就是不健康的
12)scheduledExecutorService 定时任务执行器,做一些定时校验的活动和操作。比如定时检查监控中心的是否健康,定时发送一些统计的数据给监控中心,定时重发那些发给注册中心失败的注册信息
接下来的所有provider的所有的代码都将围绕着这边的几个全局变量展开的,完成的功能也就是上面的Provider接口需要实现的功能的~
本小节,只是给大家一个对Provider有一个初步的认识,知道实现的思路,这当然不是我设计的,效仿的是RocketMQ和Jupiter
下一个小节,详细说明服务提供端Provider的服务编织和注册
Provider.java
package org.laopopo.client.provider; import io.netty.channel.Channel; import org.laopopo.common.exception.remoting.RemotingException; import org.laopopo.remoting.model.RemotingTransporter; /** * * @author BazingaLyn * @description provider端的接口 * 服务提供者端需要提供以下接口 * 1)需要暴露哪些服务【必要】{@link Provider #publishService(Object...)} * 2)暴露的服务在哪个端口上提供【必要】{@link Provider #serviceListenAddress(String)} * 3)设置注册中心的地址【必要】{@link Provider #registryAddress(String)} * 4)暴露启动服务提供者的方法【必须调用】{@link Provider #start()} * 5)设置provider端提供的监控地址【非必要】{@link Provider #monitorAddress(String)} * @time 2016年8月16日 * @modifytime 2016年8月23日 */ public interface Provider { /** * 启动provider的实例 * @throws RemotingException * @throws InterruptedException */ void start() throws InterruptedException, RemotingException; /** * 发布服务 * @throws InterruptedException * @throws RemotingException */ void publishedAndStartProvider() throws InterruptedException, RemotingException; /** * 暴露服务的地址 * @param port * @return */ Provider serviceListenPort(int exposePort); /** * 设置注册中心的地址 host:port,host1:port1 * @param registryAddress * @return */ Provider registryAddress(String registryAddress); /** * 监控中心的地址,不是强依赖,不设置也没有关系 * @param monitorAddress * @return */ Provider monitorAddress(String monitorAddress); /** * 需要暴露的接口 * @param obj */ Provider publishService(Object ...obj); /** * 处理消费者的rpc请求 * @param request * @param channel * @return */ void handlerRPCRequest(RemotingTransporter request, Channel channel); }代码注释写的还算健全,也很容易明白,就不多做解释了,我们看看最最核心的它的实现类:
DefaultProvider.java 这边就不贴完整的代码了,代码可以去本小节的底部的Github的链接,我们看看基本的代码结构
对上图做一个简单的说明:
1)它需要作为Client去连接注册中心和监控中心,这个有一个NettyClient就可以了,毕竟对这边的性能要求不是很高
2)需要有两个NettyServer,都是等待消息消费者的连接,一个做普通服务用,另一个做VIP服务用,做个约定默认的VIP提供的端口是普通端口-2
3) 再说ProviderRegistryController和ProviderRPCController,因为我们知道Provider的主要功能就是分2块,一个是注册服务,一个是提供服务,所以将这两块代码写在单独的两个模块里,方便代码的管理和业务模块化,不至于代码很乱很脏
4)两个ExcutorService线程执行器就不做介绍了,这边可能后面需要优化
5)publishRemotingTransporters这个就是需要发送给注册中心的编织好的服务类
6)globalPublishService是一个Map,放在这边方便给监控中心和其他功能的使用
7)registryAddress注册中心的地址,需要用户提供
8)exposePort本地暴露的端口
9)监控中心的地址,也需要用户提供,当然不是一定需要的
10)要提供的服务obj,这是强依赖的,这太重要了,没他就没得玩了~
11)ProvierStateIsHealthy 服务提供者的状态信息,因为假如注册中心宕机重启之后,可能之前注册的信息就丢失了,所以需要重新注册,这时候的服务状态就是不健康的
12)scheduledExecutorService 定时任务执行器,做一些定时校验的活动和操作。比如定时检查监控中心的是否健康,定时发送一些统计的数据给监控中心,定时重发那些发给注册中心失败的注册信息
接下来的所有provider的所有的代码都将围绕着这边的几个全局变量展开的,完成的功能也就是上面的Provider接口需要实现的功能的~
本小节,只是给大家一个对Provider有一个初步的认识,知道实现的思路,这当然不是我设计的,效仿的是RocketMQ和Jupiter
下一个小节,详细说明服务提供端Provider的服务编织和注册
相关文章推荐
- 一起写RPC框架(十)RPC服务提供端二--服务的编织和注册
- 一起写RPC框架(十九)RPC服务消费者一--服务消费者简介
- 一起写RPC框架(十一)RPC服务提供端三--服务的调用
- 一起写RPC框架(二十四)RPC测试篇一---基本业务逻辑的测试
- 模拟基本的RPC框架代码
- 一起写RPC框架(十三)RPC服务提供端四--服务的降级
- 一起写RPC框架(二十二)RPC服务消费者四--服务消费者服务编织
- 一起写RPC框架(十七)RPC注册中心四--注册中心服务消费者端的处理
- 服务端开发,基本的框架结构图(SSH及其他)
- 使用 .NET 框架将现有代码作为 Web 服务提供
- 一起写RPC框架(八)RPC服务提供端开篇--人生若只如初见
- 一起写RPC框架(二十一)RPC服务消费者三--服务消费者负载策略
- 一起写RPC框架(二十五)RPC测试篇二---服务消费者和服务提供者直连测试
- 使用 .NET 框架将现有代码作为 Web 服务提供
- 一起写RPC框架(十五)RPC注册中心二--注册中心的基本实现
- 一起写RPC框架(十二)RPC服务提供端四--服务的限流
- 一起写RPC框架(二十)RPC服务消费者二--服务消费者订阅服务
- 一起写RPC框架(二十三)RPC代码小总结
- 9.5 远程服务调用框架-远程服务调用协议-RPC基本协议配置
- 汇编语言---基本结构框架