日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Nacos(九)之Dubbo 融合 Nacos 成为注册中心

發(fā)布時(shí)間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nacos(九)之Dubbo 融合 Nacos 成为注册中心 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自??Dubbo 融合 Nacos 成為注冊(cè)中心

Nacos 作為 Dubbo 生態(tài)系統(tǒng)中重要的注冊(cè)中心實(shí)現(xiàn),本文將會(huì)介紹如何進(jìn)行 Dubbo 對(duì)接 Nacos 注冊(cè)中心的工作。

預(yù)備工作

請(qǐng)確保后臺(tái)已經(jīng)啟動(dòng) Nacos 服務(wù),可先行參考?Nacos 快速入門。

快速上手

Dubbo 融合 Nacos 成為注冊(cè)中心的操作步驟非常簡(jiǎn)單,大致步驟可分為“增加 Maven 依賴”以及“配置注冊(cè)中心“。

增加 Maven 依賴

只需要依賴Dubbo客戶端即可,關(guān)于推薦的使用版本,請(qǐng)參考Dubbo官方文檔或者咨詢Dubbo開發(fā)人員:

<dependencies>...<!-- Dubbo dependency --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>[latest version]</version></dependency><!-- 使用Spring裝配方式時(shí)可選: --><dependency><groupId>com.alibaba.spring</groupId><artifactId>spring-context-support</artifactId><version>[latest version]</version></dependency>...</dependencies>

配置注冊(cè)中心

假設(shè)您 Dubbo 應(yīng)用使用 Spring Framework 裝配,將有兩種配置方法可選,分別為:Dubbo Spring 外部化配置以及 Spring XML 配置文件以及,筆者強(qiáng)烈推薦前者。

Dubbo Spring 外部化配置

Dubbo Spring 外部化配置是由 Dubbo?2.5.8?引入的新特性,可通過 Spring?Environment?屬性自動(dòng)地生成并綁定 Dubbo 配置 Bean,實(shí)現(xiàn)配置簡(jiǎn)化,并且降低微服務(wù)開發(fā)門檻。

假設(shè)您 Dubbo 應(yīng)用的使用 Zookeeper 作為注冊(cè)中心,并且其服務(wù)器 IP 地址為:10.20.153.10,同時(shí),該注冊(cè)地址作為 Dubbo 外部化配置屬性存儲(chǔ)在?dubbo-config.properties?文件,如下所示:

## application dubbo.application.name = your-dubbo-application## Zookeeper registry address dubbo.registry.address = zookeeper://10.20.153.10:2181 ...

假設(shè)您的 Nacos Server 同樣運(yùn)行在服務(wù)器?10.20.153.10?上,并使用默認(rèn) Nacos 服務(wù)端口?8848,您只需將?dubbo.registry.address?屬性調(diào)整如下:

## 其他屬性保持不變## Nacos registry address dubbo.registry.address = nacos://10.20.153.10:8848 ##如果要使用自己創(chuàng)建的命名空間可以使用下面2種方式 #dubbo.registry.address = nacos://10.20.153.10:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932 #dubbo.registry.parameters.namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932 ...

隨后,重啟您的 Dubbo 應(yīng)用,Dubbo 的服務(wù)提供和消費(fèi)信息在 Nacos 控制臺(tái)中可以顯示:

如圖所示,服務(wù)名前綴為?providers:?的信息為服務(wù)提供者的元信息,consumers:?則代表服務(wù)消費(fèi)者的元信息。點(diǎn)擊“詳情”可查看服務(wù)狀態(tài)詳情:

如果您正在使用 Spring XML 配置文件裝配 Dubbo 注冊(cè)中心的話,請(qǐng)參考下一節(jié)。

Spring XML 配置文件

同樣,假設(shè)您 Dubbo 應(yīng)用的使用 Zookeeper 作為注冊(cè)中心,并且其服務(wù)器 IP 地址為:10.20.153.10,并且裝配 Spring Bean 在 XML 文件中,如下所示:

<?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://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><!-- 提供方應(yīng)用信息,用于計(jì)算依賴關(guān)系 --><dubbo:application name="dubbo-provider-xml-demo" /><!-- 使用 Zookeeper 注冊(cè)中心 --><dubbo:registry address="zookeeper://10.20.153.10:2181" />... </beans>

與?Dubbo Spring 外部化配置?配置類似,只需要調(diào)整?address?屬性配置即可:

<?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://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><!-- 提供方應(yīng)用信息,用于計(jì)算依賴關(guān)系 --><dubbo:application name="dubbo-provider-xml-demo" /><!-- 使用 Nacos 注冊(cè)中心 --><dubbo:registry address="nacos://10.20.153.10:8848" /><!-- 如果要使用自己創(chuàng)建的命名空間可以使用下面配置 --><!-- <dubbo:registry address="nacos://10.20.153.10:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932" /> -->... </beans>

重啟 Dubbo 應(yīng)用后,您同樣也能發(fā)現(xiàn)服務(wù)提供方和消費(fèi)方的注冊(cè)元信息呈現(xiàn)在 Nacos 控制臺(tái)中:

您是否絕對(duì)配置或切換 Nacos 注冊(cè)中心超級(jí) Easy 呢?如果您仍舊意猶未盡或者不甚明白的話,可參考以下完整的示例。

完整示例

以上圖片中的元數(shù)據(jù)源于 Dubbo Spring 注解驅(qū)動(dòng)示例以及 Dubbo Spring XML 配置驅(qū)動(dòng)示例,下面將分別介紹兩者,您可以選擇自己偏好的編程模型。在正式討論之前,先來介紹兩者的預(yù)備工作,因?yàn)樗鼈兘砸蕾?Java 服務(wù)接口和實(shí)現(xiàn)。同時(shí),請(qǐng)確保本地(127.0.0.1)環(huán)境已啟動(dòng) Nacos 服務(wù)。

示例接口與實(shí)現(xiàn)

首先定義示例接口,如下所示:

package com.alibaba.dubbo.demo.service;/*** DemoService** @since 2.6.5*/ public interface DemoService {String sayName(String name);}

提供以上接口的實(shí)現(xiàn)類:

package com.alibaba.dubbo.demo.service;import com.alibaba.dubbo.config.annotation.Service; import com.alibaba.dubbo.rpc.RpcContext;import org.springframework.beans.factory.annotation.Value;/*** Default {@link DemoService}** @since 2.6.5*/ @Service(version = "${demo.service.version}") public class DefaultService implements DemoService {@Value("${demo.service.name}")private String serviceName;public String sayName(String name) {RpcContext rpcContext = RpcContext.getContext();return String.format("Service [name :%s , port : %d] %s(\"%s\") : Hello,%s",serviceName,rpcContext.getLocalPort(),rpcContext.getMethodName(),name,name);} }

接口與實(shí)現(xiàn)準(zhǔn)備妥當(dāng)后,下面將采用注解驅(qū)動(dòng)和 XML 配置驅(qū)動(dòng)各自實(shí)現(xiàn)。

Spring 注解驅(qū)動(dòng)示例

Dubbo?2.5.7?重構(gòu)了 Spring 注解驅(qū)動(dòng)的編程模型。

服務(wù)提供方注解驅(qū)動(dòng)實(shí)現(xiàn)

  • 定義 Dubbo 提供方外部化配置屬性源 -?provider-config.properties
## application dubbo.application.name = dubbo-provider-demo## Nacos registry address dubbo.registry.address = nacos://127.0.0.1:8848 ##如果要使用自己創(chuàng)建的命名空間可以使用下面2種方式 #dubbo.registry.address = nacos://127.0.0.1:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932 #dubbo.registry.parameters.namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932## Dubbo Protocol dubbo.protocol.name = dubbo dubbo.protocol.port = -1# Provider @Service version demo.service.version=1.0.0 demo.service.name = demoService
  • 實(shí)現(xiàn)服務(wù)提供方引導(dǎo)類 -?DemoServiceProviderBootstrap
package com.alibaba.dubbo.demo.provider;import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo; import com.alibaba.dubbo.demo.service.DemoService;import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.PropertySource;import java.io.IOException;/*** {@link DemoService} provider demo*/ @EnableDubbo(scanBasePackages = "com.alibaba.dubbo.demo.service") @PropertySource(value = "classpath:/provider-config.properties") public class DemoServiceProviderBootstrap {public static void main(String[] args) throws IOException {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();context.register(DemoServiceProviderBootstrap.class);context.refresh();System.out.println("DemoService provider is starting...");System.in.read();} }

其中注解?@EnableDubbo?激活 Dubbo 注解驅(qū)動(dòng)以及外部化配置,其?scanBasePackages?屬性掃描指定 Java 包,將所有標(biāo)注?@Service?的服務(wù)接口實(shí)現(xiàn)類暴露為 Spring Bean,隨即被導(dǎo)出 Dubbo 服務(wù)。

@PropertySource?是 Spring Framework 3.1 引入的標(biāo)準(zhǔn)導(dǎo)入屬性配置資源注解,它將為 Dubbo 提供外部化配置。

服務(wù)消費(fèi)方注解驅(qū)動(dòng)實(shí)現(xiàn)

  • 定義 Dubbo 消費(fèi)方外部化配置屬性源 -?consumer-config.properties
## Dubbo Application info dubbo.application.name = dubbo-consumer-demo## Nacos registry address dubbo.registry.address = nacos://127.0.0.1:8848 ##如果要使用自己創(chuàng)建的命名空間可以使用下面2種方式 #dubbo.registry.address = nacos://127.0.0.1:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932 #dubbo.registry.parameters.namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932# @Reference version demo.service.version= 1.0.0

同樣地,dubbo.registry.address?屬性指向 Nacos 注冊(cè)中心,其他 Dubbo 服務(wù)相關(guān)的元信息通過 Nacos 注冊(cè)中心獲取。

  • 實(shí)現(xiàn)服務(wù)消費(fèi)方引導(dǎo)類 -?DemoServiceConsumerBootstrap
package com.alibaba.dubbo.demo.consumer;import com.alibaba.dubbo.config.annotation.Reference; import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo; import com.alibaba.dubbo.demo.service.DemoService;import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.PropertySource;import javax.annotation.PostConstruct; import java.io.IOException;/*** {@link DemoService} consumer demo*/ @EnableDubbo @PropertySource(value = "classpath:/consumer-config.properties") public class DemoServiceConsumerBootstrap {@Reference(version = "${demo.service.version}")private DemoService demoService;@PostConstructpublic void init() {for (int i = 0; i < 10; i++) {System.out.println(demoService.sayName("小馬哥(mercyblitz)"));}}public static void main(String[] args) throws IOException {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();context.register(DemoServiceConsumerBootstrap.class);context.refresh();context.close();} }

同樣地,@EnableDubbo?注解激活 Dubbo 注解驅(qū)動(dòng)和外部化配置,不過當(dāng)前屬于服務(wù)消費(fèi)者,無需指定 Java 包名掃描標(biāo)注?@Service?的服務(wù)實(shí)現(xiàn)。

@Reference?是 Dubbo 遠(yuǎn)程服務(wù)的依賴注入注解,需要服務(wù)提供方和消費(fèi)端約定接口(interface)、版本(version)以及分組(group)信息。在當(dāng)前服務(wù)消費(fèi)示例中,DemoService?的服務(wù)版本來源于屬性配置文件?consumer-config.properties。

@PostConstruct?部分代碼則說明當(dāng)?DemoServiceConsumerBootstrap?Bean 初始化時(shí),執(zhí)行十次 Dubbo 遠(yuǎn)程方法調(diào)用。

運(yùn)行注解驅(qū)動(dòng)示例

在本地啟動(dòng)兩次?DemoServiceProviderBootstrap,注冊(cè)中心將出現(xiàn)兩個(gè)健康服務(wù):

再運(yùn)行?DemoServiceConsumerBootstrap,運(yùn)行結(jié)果如下:

Service [name :demoService , port : 20880] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :demoService , port : 20881] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :demoService , port : 20880] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :demoService , port : 20880] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :demoService , port : 20881] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :demoService , port : 20881] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :demoService , port : 20880] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :demoService , port : 20880] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :demoService , port : 20881] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :demoService , port : 20881] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz)

運(yùn)行無誤,并且服務(wù)消費(fèi)方使用了負(fù)載均衡策略,將十次 RPC 調(diào)用平均分?jǐn)偟絻蓚€(gè) Dubbo 服務(wù)提供方實(shí)例中。

Spring XML 配置驅(qū)動(dòng)示例

Spring XML 配置驅(qū)動(dòng)是傳統(tǒng) Spring 裝配組件的編程模型。

服務(wù)提供方 XML 配置驅(qū)動(dòng)

  • 定義服務(wù)提供方 XML 上下文配置文件 -?/META-INF/spring/dubbo-provider-context.xml
<?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://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><!-- 提供方應(yīng)用信息,用于計(jì)算依賴關(guān)系 --><dubbo:application name="dubbo-provider-xml-demo"/><!-- 使用 Nacos 注冊(cè)中心 --><dubbo:registry address="nacos://127.0.0.1:8848"/><!-- 如果要使用自己創(chuàng)建的命名空間可以使用下面配置 --><!-- <dubbo:registry address="nacos://127.0.0.1:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932" /> --><!-- 用dubbo協(xié)議在隨機(jī)端口暴露服務(wù) --><dubbo:protocol name="dubbo" port="-1"/><!-- 聲明需要暴露的服務(wù)接口 --><dubbo:service interface="com.alibaba.dubbo.demo.service.DemoService" ref="demoService" version="2.0.0"/><!-- 和本地bean一樣實(shí)現(xiàn)服務(wù) --><bean id="demoService" class="com.alibaba.dubbo.demo.service.DefaultService"/> </beans>
  • 實(shí)現(xiàn)服務(wù)提供方引導(dǎo)類 -?DemoServiceProviderXmlBootstrap
package com.alibaba.dubbo.demo.provider;import com.alibaba.dubbo.demo.service.DemoService;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;/*** {@link DemoService} provider demo XML bootstrap*/ public class DemoServiceProviderXmlBootstrap {public static void main(String[] args) throws IOException {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();context.setConfigLocation("/META-INF/spring/dubbo-provider-context.xml");context.refresh();System.out.println("DemoService provider (XML) is starting...");System.in.read();} }

服務(wù)消費(fèi)方 XML 配置驅(qū)動(dòng)

  • 定義服務(wù)消費(fèi)方 XML 上下文配置文件 -?/META-INF/spring/dubbo-consumer-context.xml
<?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://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><!-- 提供方應(yīng)用信息,用于計(jì)算依賴關(guān)系 --><dubbo:application name="dubbo-consumer-xml-demo"/><!-- 使用 Nacos 注冊(cè)中心 --><dubbo:registry address="nacos://127.0.0.1:8848"/><!-- 如果要使用自己創(chuàng)建的命名空間可以使用下面配置 --><!-- <dubbo:registry address="nacos://127.0.0.1:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932" /> --><!-- 引用服務(wù)接口 --><dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.service.DemoService" version="2.0.0"/></beans>
  • 實(shí)現(xiàn)服務(wù)消費(fèi)方引導(dǎo)類 -?DemoServiceConsumerXmlBootstrap
package com.alibaba.dubbo.demo.consumer;import com.alibaba.dubbo.demo.service.DemoService;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;/*** {@link DemoService} consumer demo XML bootstrap*/ public class DemoServiceConsumerXmlBootstrap {public static void main(String[] args) throws IOException {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();context.setConfigLocation("/META-INF/spring/dubbo-consumer-context.xml");context.refresh();System.out.println("DemoService consumer (XML) is starting...");DemoService demoService = context.getBean("demoService", DemoService.class);for (int i = 0; i < 10; i++) {System.out.println(demoService.sayName("小馬哥(mercyblitz)"));}context.close();} }

運(yùn)行 XML 配置驅(qū)動(dòng)示例

同樣地,先啟動(dòng)兩個(gè)?DemoServiceProviderXmlBootstrap?引導(dǎo)類,觀察 Nacos 注冊(cè)中心服務(wù)提供者變化:

XML 配置驅(qū)動(dòng)的服務(wù)版本為?2.0.0,因此注冊(cè)服務(wù)無誤。

再運(yùn)行服務(wù)消費(fèi)者引導(dǎo)類?DemoServiceConsumerXmlBootstrap,觀察控制臺(tái)輸出內(nèi)容:

Service [name :null , port : 20882] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :null , port : 20882] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :null , port : 20883] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :null , port : 20882] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :null , port : 20882] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :null , port : 20883] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :null , port : 20882] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :null , port : 20883] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :null , port : 20883] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz) Service [name :null , port : 20883] sayName("小馬哥(mercyblitz)") : Hello,小馬哥(mercyblitz)

結(jié)果同樣運(yùn)行和負(fù)載均衡正常,不過由于當(dāng)前示例尚未添加屬性?demo.service.name?的緣故,因此,“name”部分信息輸出為?null。

如果您關(guān)注或喜愛 Dubbo 以及 Nacos 等開源工程,不妨為它們點(diǎn) “star”,加油打氣鏈接:

  • Apache Dubbo:https://github.com/apache/dubbo
  • Dubbo Nacos Registry:https://github.com/apache/dubbo/tree/master/dubbo-registry/dubbo-registry-nacos
  • Alibaba Nacos:https://github.com/alibaba/nacos

總結(jié)

以上是生活随笔為你收集整理的Nacos(九)之Dubbo 融合 Nacos 成为注册中心的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。