基于Spring、redis、netty手写RPC框架 - Go语言中文社区

基于Spring、redis、netty手写RPC框架


服务结构:

结构说明:

redis 服务器里面有两种集合,一个集合保存服务器地址信息,另一种集合保存每一台服务所提供的服务名称。如果现在有两台服务器提供服务,则redis注册中心中的数据结构如下:

server_list保存的是哪些服务器提供远程服务,value值为IP_端口的形式。然后每一个服务器提供哪些服务,由另一个集合保存,并且该集合的有过期时间的,如上面的172.32.4.1_8888集合提供了4个服务,172.32.4.4_9999提供了2个服务。

服务器启动过程:

服务器启动时,应用会把有@Rpcservice注解的SpringBean发布到redis注册中心中,并且把自身服务器信息加入到server_list列表。因为服务器自身的服务列表是有过期时间的,如上面的172.32.4.1_8888集合是有过期时间的,所以服务器需要不断向注册中心发送expire命令以保持服务在线。如果服务器中断了发送expire,redis会自动把该服务移除,我们就认为该服务已经挂掉了。

客户端启动过程:

客户端启动时,会扫描配置文件中的包名下的接口,然获取到redis注册中心中的服务列表信息,查看是否有服务和该接口匹配,如果匹配,会创建和该服务器之间的socket连接,用于后续发起请求,如果有多个服务和该接口匹配,会创建多个连接。客户端启动完成后,还会不断向redis注册中心获取最新的服务列表,然后更新到本地。如果一个服务已经挂掉,发起请求时,会检测到连接已经失效,会移除改连接,并且尝试换一个可用的连接进行请求,如果没有连接可用,会立即向redis更新服务列表,然后创建新的连接进行请求,如果更新服务列表后,还是没有可用的服务,则抛出异常。

 

源码和使用demo,请移步github

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u014022405/article/details/90238697
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:46:09
  • 阅读 ( 915 )
  • 分类:Redis

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢