成天用什么Nacos、zookeeper啥的,好烦哦,还不如自己撸一个
本文章环境
JDK8
dubbo(2.6.12)
IDEA(2023.3.2new UI)
MacOS
创建项目
这点随意,springBoot,Servlet都可以
引入两个核心pom(PS:源码阅读能力差的建议直接用我的版本)
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.104.Final</version>
</dependency>
完成后建议先启动起来,确保项目可以正常运行
开始创建注册中心
1、创建注册、订阅等实现类
可能有小伙伴会问,为啥直接暴露注册中心呢?说来有趣,因为暴露时必须有注册实现类
方法很简单,创建一个类,去实现com.alibaba.dubbo.registry.RegistryService就好了,其中有五个方法,分别是
注册(register)、取消注册(unregister)、订阅(subscribe)、取消订阅(unsubscribe)、查询(lookup)
可以先简单的写一下标记一下,这里后期会补充
2、暴露服务
首先,注册中心需要暴露服务,可以安装开关去启动,但建议还是服务器开机就启动
我比较喜欢用servlet,所以我写在ServletContextListener@contextInitialized里
服务启动后,需要单独开一个接口,暴露给提供者和消费者,dubbo为我们搞了一套
这里我直接复制我的代码,基本上复制粘贴上去就能用,如果需要研究内部的话......自己去看源码吧!!!
// 配置当前Application信息
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("DoDayum-dubbo");
// 配置协议
ProtocolConfig protocol = new ProtocolConfig();
protocol.setName("dubbo");
protocol.setPort(8000); // 暴露出去的端口
protocol.setThreads(100);
// 配置注册中心
RegistryConfig registryConfig = new RegistryConfig(RegistryConfig.NO_AVAILABLE);
registryConfig.setGroup("dubbo");
serviceConfig = new ServiceConfig<>();
serviceConfig.setApplication(applicationConfig);
serviceConfig.setRegister(false);
serviceConfig.setRegistry(registryConfig);
serviceConfig.setProtocol(protocol);
serviceConfig.setInterface(RegistryService.class);
serviceConfig.setRef(new MyDubboRegistryService()); // (1、创建注册、订阅等实现类)那一步的类
serviceConfig.setCallbacks(10000);
serviceConfig.setOndisconnect("disconnect");
serviceConfig.setTimeout(1000 * 60);
serviceConfig.export();
这里比较重要的是第8行,即注册中心暴露出去的接口,后面测试时要连的就是这个端口
还有第18行,可能有的小伙伴公司代码比较老,注册中心有17行那步没18行那步骤,如果只有17行那确定你用的是dubbo2.4之前的代码,因为2.4之前,如果register设置为false,底层会自动执行第18行那步骤
测试
OK,注册中心写完了,接下来开始测试
测试前建议,在实现RegistryService的累里所有方法打上一个断点,就可以了
测试用的provider和consumer这里就不用多讲了,网上demo一抄一大把,需要注意的点是以前写注册中心地址时写的是*<dubbo:registry group="dodayum" address="zookeeper://127.0.0.1:2181"/>,现在更改为**<dubbo:registry address="127.0.0.1:8000"/>***就好了,其中端口就是(2、暴露服务)那步第8行
然后
第一步:先在RegistryService实现类里打上断点,做好标记,再启动注册中心,看看有没有启动成功
第二步:直接启动提供者,如果注册进来会立即进入注册中心断点,那注册中心的架子就搭建完成了
OVER
关注我,更新超级接地气 + 实用的技术,全网原创!!!