dubbo.registry.address=redis://127.0.0.1:6379

注册上来的数据是这样,类型是hash

/dubbo/

s

e

r

v

i

c

e

/

{service}/

service/{category}

/dubbo/com.newboo.sample.api.DemoService/consumers

/dubbo/com.newboo.sample.api.DemoService/providers

hash数据结构下保存的key是注册上来的url,value是过期时间

127.0.0.1:6379> hgetall /dubbo/com.newboo.sample.api.DemoService/providers

“dubbo://172.23.233.142:20881/com.newboo.sample.api.DemoService?anyhost=true&application=boot-samples-dubbo&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.newboo.sample.api.DemoService&metadata-type=remote&methods=sayHello&pid=19807&release=2.7.8&side=provider×tamp=1621857955355” “1621858734778”

从理论上来说,注册中心只要符合数据存储、监听推送变更、心跳检测这几个基本的功能即可。

以dubbo为例看下redis是如何利用自身特性来完成注册中心的功能( 以dubbo 2.7.8版本为例):

服务注册 provider在服务注册时,将服务提供方的url写入/dubbo/${service}/providers下,数据类型为hash,key为提供方url,value为key的过期时间,默认为60s,可配置 写入完成后以/dubbo/${service}/providers为key调用publish命令发布一个register事件 provider在初始化时起一个单独的线程每隔1/2过期时间(默认30s)时对provider进行重新重新注册并发布register事件 服务发现 获取匹配/dubbo/${service}/*的key(此处用到了keys命令),拿到的有这几种:/dubbo/${service}/providers、/dubbo/${service}/routers、/dubbo/${service}/configuators 对/dubbo/${service}/*拿到的key进行`h 需要zi料+ 绿色徽【vip1024b】

getall`,拿到真实的provider列表以及配置等数据,进行组装、匹配

同时对每个subscribe的服务单独开一个线程,对/dubbo/${service}执行psubscribe命令阻塞等待有事件发生

从源码和测试来看,dubbo的redis注册中心不能直接用于生产环境,原因有如下两点:

使用了keys命令,会阻塞单线程的redis,keys执行期间,其他命令都得排队

Java核心架构进阶知识点

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补 …(img-ecjWAVb5-1710365244318)]

[外链图片转存中…(img-vhDs9IUk-1710365244318)]

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: