分布式服务框架目前市面上用的最多的估计就是上面两个框架,dubbo与springcloud

关于这两个框架的对比 我个人跟认为 dubbo是远程服务调用框架 springcloud更是微服务框架 从性能上来说 dubbo性能更好 但是本身的功能有限 springcloud 是提供了一整套微服务的框架 除了远程服务调用 还有网关 调用链追踪 配置中心等 并且 springcloud提供的外部服务主推http接口 这样可以对内提供服务的同时 这个接口还能对外提供服务 但是其序列化中 主要依靠http报文的转换 并不像dubbo使用byte数组进行序列化 并且 在传输的框架上 dubbo使用netty 进行传输 异步非阻塞io 虽然现在 servlet3.1也支持 但是 要依靠外部的容器升级 与 webflux 的配合 但是在两者使用上 我觉得 springcloud是真的舒服
下面 我参考 springcloud模拟了一个微服务rpc调用框架 其中使用zookeeper 临时节点作为注册发现的功能,网络间传输
原理:
提供者启动后 会降自身的ip与端口 注册到zookeeper列表 并且 将自身的url写到节点的数据中去

消费者 监听这个节点 并 事实改变节点列表内的数据

下面是源码地址

模拟springcloud服务调用源码 启动方式

配置好zookeeper地址

消费者:

微服务远程连接表 微服务远程调用框架_微服务远程连接表


提供者:

微服务远程连接表 微服务远程调用框架_zookeeper_02


启动后 在提供者未启动的情况下调用 会抛出异常 这里 可以 作为降级 模拟

服务提供者未启动效果

微服务远程连接表 微服务远程调用框架_微服务远程连接表_03


当启动多个服务提供者效果:

微服务远程连接表 微服务远程调用框架_分布式_04


微服务远程连接表 微服务远程调用框架_java_05

我这里 启动了两个提供者 分别是不同的端口 每次 调用都会轮训的切换节点调用