Spring Alibaba Nacos替換dubbo zookeeper
阿里巴巴不得不說在開源方面是國內做的最好的,沒有之一吧。先是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介面程式碼如下:
/**
* @author gosaint
*/
public interface DemoService {
String sayHello(String name);
}
然後我們搭建Provider,服務的提供者。首先要加nacos的jar包。還有要說明一點,必須加上log4j-core這個jar包。否則會報錯。這是nacos的一個bug。我還有點小小的激動,剛才我問了下nacos開源組織大神小馬哥,小馬哥說這確實是一個bug,然我解決,我希望可以成為我nacos的一個commiter。下面的依賴涉及Spring、Dubbo的依賴我不展示了,只展示nacos的依賴以及log4j-core。就是一個單純的dubbo工程,只不過加上這兩個jar即可。
<!-- Dubbo Nacos registry dependency -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.10.0</version>
</dependency>
然後是dubbo的配置檔案。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--應用名稱-->
<dubbo:application name="demo-dubbo"/>
<!--註冊中心 這裡使用Zookeeper-->
<!-- <dubbo:registry address="zookeeper://127.0.0.1:2182"/>-->
<!--使用nacos作為註冊中心-->
<dubbo:registry address="nacos://127.0.0.1:8848" />
<!--用dubbo協議在20880埠暴露服務-->
<dubbo:protocol name="dubbo" port="20885"/>
<!--介面以及實現類-->
<dubbo:service interface="com.cmos.interfaces.DemoService" ref="demoService" />
<bean id="demoService" class="com.cmos.service.DemoServiceImpl"/>
</beans>
需要說明的是nacos的預設埠是8848.然後我們寫介面的實現以及Dubbo的啟動類:
/**
* @author gosaint
*/
public class DemoServiceImpl implements DemoService {
public String sayHello(String name) {
return "Hello " + name;
}
}
下面是dubbo的啟動類:
/**
* @author gosaint
*/
public class Provider {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"META-INF/spring/dubbo-demo-provider.xml"});
context.start();
System.out.println("服務啟動!");
System.in.read();
}
}
執行方法,啟動成功!
下面繼續搭建Consumer。pom依賴基本一致,我就不貼程式碼啦。然後就是配置檔案和服務dubbo消費者的啟動。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--應用名稱-->
<dubbo:application name="demo-dubbo"/>
<!--註冊中心 這裡使用Zookeeper-->
<!-- <dubbo:registry address="zookeeper://127.0.0.1:2182"/>-->
<dubbo:registry address="nacos://127.0.0.1:8848"/>
<dubbo:reference id="demoService" interface="com.cmos.interfaces.DemoService"/>
</beans>
啟動類如下:
/**
* @author gosaint
*/
public class Consumer {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext
(new String[] {"META-INF/spring/dubbo-demo-consumer.xml"});
context.start();
// 獲取遠端服務代理
DemoService demoService = (DemoService)context.getBean("demoService");
// 執行遠端方法
String hello = demoService.sayHello("world");
// 顯示呼叫結果
System.out.println( hello );
System.in.read();
}
}
最後的執行結果:Hello World。是不是和zookeeper基本一致呢。關於nacos的基本實現我還沒有了解過,因此無從比較優劣。最後nacos提供了一個管理頁面,可以直接訪問http://127.0.0.1:8848/nacos/index.html 。如下是我的管理介面:
相關文章
- Spring Cloud Alibaba實戰(八) - Dubbo + NacosSpringCloud
- Spring Cloud Alibaba之NacosSpringCloud
- Spring Boot Dubbo NacosSpring Boot
- Spring Cloud Alibaba生態探索:Dubbo、Nacos及Sentinel的完美結合SpringCloud
- Spring Cloud Alibaba(2)---Nacos概述SpringCloud
- Spring Cloud Alibaba遷移指南(二):零程式碼替換 EurekaSpringCloud
- Spring Cloud Alibaba | Nacos配置管理SpringCloud
- Spring Cloud Alibaba(5)---Nacos(配置中心)SpringCloud
- spring cloud alibaba springboot nacos 版本對應CloudSpring Boot
- Spring Cloud Alibaba(4)---Nacos(註冊中心)SpringCloud
- Spring Cloud Alibaba(11)---Sentinel+Nacos持久化SpringCloud持久化
- Spring boot + Zookeeper + Dubbo學習筆記Springboot筆記
- Spring Cloud Alibaba Nacos 之 灰度釋出(思路分享)SpringCloud
- Spring Cloud Alibaba Nacos異常Java.Net.UnknownHostExceptionSpringCloudJavaException
- 13 Spring Cloud Alibaba簡介和Nacos安裝SpringCloud
- Dubbo與SpringCloud Alibaba使用Nacos作為配置中心和註冊中心SpringGCCloud
- 使用Spring Cloud Gateway 替換 zuul, 並代理註冊在 Nacos 中的微服務SpringCloudGatewayZuul微服務
- Spring Cloud Alibaba基礎教程:Nacos的叢集部署SpringCloud
- Spring Cloud Alibaba | Nacos服務註冊與發現SpringCloud
- Spring Cloud Alibaba 整合 Nacos 實現服務配置中心SpringCloud
- 普通springcloud eureka 和 spring cloud Alibaba nacos 註冊中心SpringGCCloud
- SpringCloud Alibaba之NacosSpringGCCloud
- Spring Cloud Alibaba系列之分散式服務元件DubboSpringCloud分散式元件
- Spring Cloud Alibaba 基礎教程:Nacos 生產級版本 0.8.0SpringCloud
- Spring Cloud Alibaba基礎教程:使用Nacos作為配置中心SpringCloud
- Spring Cloud Alibaba基礎教程:Nacos 生產級版本 0.8.0SpringCloud
- Spring Cloud Alibaba系列(二)nacos作為服務配置中心SpringCloud
- 建立一個spring alibaba nacos Discovery 服務註冊demoSpring
- Spring Cloud Alibaba基礎教程:Nacos的資料持久化SpringCloud持久化
- Spring Cloud Alibaba 使用Nacos作為服務註冊中心SpringCloud
- Spring Cloud Alibaba 使用Nacos作為配置管理中心SpringCloud
- zookeeper、dubbo、kafkaKafka
- dubbo 和 zookeeper
- 為什麼阿里的dubbo註冊中心要放棄zookeeper, 而用Nacos?阿里
- Springcloud alibaba nacos配置中心SpringGCCloud
- Spring Cloud Alibaba基礎教程:Sentinel使用Nacos儲存規則SpringCloud
- Spring Cloud Alibaba:Nacos 作為註冊中心和配置中心使用SpringCloud
- Spring Cloud Alibaba基礎教程:Nacos配置的多環境管理SpringCloud