当前位置:   article > 正文

Spring Alibaba Nacos替换dubbo zookeeper_zookeeper节点,对应的nacos有替代方案吗

zookeeper节点,对应的nacos有替代方案吗

阿里巴巴不得不说在开源方面是国内做的最好的,没有之一吧。先是druid数据库连接池。笔者有幸在学习之处就使用到它,它是在2012年开源的,但是大规模的使用却是在2015年。后来又推出了dubbo RPC框架。这个在2012年开源的,但是后续没有人维护,再到后来携程pull了一个分支自己去维护,也就是dubbox。直到2017年dubbo开始复活,并且每个月发布新的版本。在国内dubbo的使用还是比较多的。然后就是接触到了RocketMQ。有个消息中间件,和dubbo一样,同样是apache基金会顶级项目。这三款开源产品现在是比较流行的。今年Spring Cloud默认的注册中心Eureka现在是闭源啦,然后就是Hytrix这个服务隔离也闭源啦。因此阿里巴巴开源团队以及国内的一些开源大神开始用nacos准备替换Eureka,还有一个功能是可以作为配置中心,之前携程的Apollo也是作为配置中心的。好了,话不多说,下面的实例工程是我使用nacos作为zookeeper的替代者作为注册中心。需要说明的是nacos现在的版本是0.6.1。因此它暂时还是不能用在生产上,但是预计2019年会正式的开源使用。

先下载nacos服务器,笔者在windows下操作的,当然linux或者是mac的具体安装可以见官网:https://nacos.io 。

 

上图是下载后的nacos的目录结构。点击bin进去之后直接运行startup.cmd即可启动nacos服务。下面表示启动成功。

                                              

上图是我构建的dubbo服务的工程结构。API是一个公共接口。Provider是服务的提供者,Consumer是服务的消费者。很简单的入门demo.

API接口代码如下:

  1. /**
  2.  * @author gosaint
  3.  */
  4. public interface DemoService {
  5.     String sayHello(String name);
  6. }

      然后我们搭建Provider,服务的提供者。首先要加nacos的jar包。还有要说明一点,必须加上log4j-core这个jar包。否则会报错。这是nacos的一个bug。我还有点小小的激动,刚才我问了下nacos开源组织大神小马哥,小马哥说这确实是一个bug,然我解决,我希望可以成为我nacos的一个commiter。下面的依赖涉及Spring、Dubbo的依赖我不展示了,只展示nacos的依赖以及log4j-core。就是一个单纯的dubbo工程,只不过加上这两个jar即可。

  1.        <!-- Dubbo Nacos registry dependency -->
  2.         <dependency>
  3.             <groupId>com.alibaba</groupId>
  4.             <artifactId>dubbo-registry-nacos</artifactId>
  5.             <version>0.0.1</version>
  6.         </dependency>
  7.         <dependency>
  8.             <groupId>org.apache.logging.log4j</groupId>
  9.             <artifactId>log4j-core</artifactId>
  10.             <version>2.10.0</version>
  11.         </dependency>
  12.         <dependency>
  13.             <groupId>org.apache.logging.log4j</groupId>
  14.             <artifactId>log4j-api</artifactId>
  15.             <version>2.10.0</version>
  16.         </dependency>

 

然后是dubbo的配置文件。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  6.        http://www.springframework.org/schema/beans/spring-beans.xsd
  7.        http://code.alibabatech.com/schema/dubbo
  8.        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9.     <!--应用名称-->
  10.     <dubbo:application name="demo-dubbo"/>
  11.     <!--注册中心 这里使用Zookeeper-->
  12.    <!-- <dubbo:registry address="zookeeper://127.0.0.1:2182"/>-->
  13.     <!--使用nacos作为注册中心-->
  14.     <dubbo:registry address="nacos://127.0.0.1:8848" />
  15.     <!--用dubbo协议在20880端口暴露服务-->
  16.     <dubbo:protocol name="dubbo" port="20885"/>
  17.     <!--接口以及实现类-->
  18.     <dubbo:service interface="com.cmos.interfaces.DemoService" ref="demoService" />
  19.     <bean id="demoService" class="com.cmos.service.DemoServiceImpl"/>
  20. </beans>

    需要说明的是nacos的默认端口是8848.然后我们写接口的实现以及Dubbo的启动类:

  1. /**
  2.  * @author gosaint 
  3.  */
  4. public class DemoServiceImpl implements DemoService {
  5.     public String sayHello(String name) {
  6.         return "Hello " + name;
  7.     }
  8. }

下面是dubbo的启动类:

  1. /**
  2.  * @author gosaint
  3.  */
  4. public class Provider {
  5.     public static void main(String[] args) throws Exception {
  6.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
  7.                 new String[] {"META-INF/spring/dubbo-demo-provider.xml"});
  8.         context.start();
  9.         System.out.println("服务启动!");
  10.         System.in.read();
  11.     }
  12. }

运行方法,启动成功!

下面继续搭建Consumer。pom依赖基本一致,我就不贴代码啦。然后就是配置文件和服务dubbo消费者的启动。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  6.        http://www.springframework.org/schema/beans/spring-beans.xsd
  7.        http://code.alibabatech.com/schema/dubbo
  8.        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9.     <!--应用名称-->
  10.     <dubbo:application name="demo-dubbo"/>
  11.     <!--注册中心 这里使用Zookeeper-->
  12.    <!-- <dubbo:registry address="zookeeper://127.0.0.1:2182"/>-->
  13.     <dubbo:registry address="nacos://127.0.0.1:8848"/>
  14.     <dubbo:reference id="demoService" interface="com.cmos.interfaces.DemoService"/>
  15. </beans>

 

启动类如下:

  1. /**
  2.  * @author gosaint
  3.  */
  4. public class Consumer {
  5.     public static void main(String[] args) throws Exception {
  6.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext
  7.                 (new String[] {"META-INF/spring/dubbo-demo-consumer.xml"});
  8.         context.start();
  9.         // 获取远程服务代理
  10.         DemoService demoService = (DemoService)context.getBean("demoService");
  11.         // 执行远程方法
  12.         String hello = demoService.sayHello("world");
  13.         // 显示调用结果
  14.         System.out.println( hello );
  15.         System.in.read();
  16.     }
  17. }

最后的运行结果:Hello World。是不是和zookeeper基本一致呢。关于nacos的基本实现我还没有了解过,因此无从比较优劣。最后nacos提供了一个管理页面,可以直接访问http://127.0.0.1:8848/nacos/index.html 。如下是我的管理界面:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/284242
推荐阅读
相关标签
  

闽ICP备14008679号