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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dubbo项目入门

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dubbo项目入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。
它的特性如下

  • 面向接口代理的高性能RPC調用
  • 智能負載均衡
  • 服務自動注冊與發現
  • 高度可擴展能力
  • 運行期流量調度
  • 可視化的服務治理與運維

Talk is cheap, Show me the code。現在來著手搭建一個Dubbo項目吧。

搭建一個xml配置的Dubbo項目

創建三個項目

  • service-api 服務提供者和服務消費者共用的接口

  • service-consumer 服務消費者

  • service-provider 服務提供者

共用的接口

先在service-api定義一個公用接口

public interface DemoService {String sayHello(String name); } 復制代碼

服務提供者

服務提供者service-provider提供一個DemoService的實現類

public class DemoServiceImpl implements DemoService {@Overridepublic String sayHello(String name) {System.out.println("[" + LocalDate.now() + "] Hello " + name );return "Hello " + name;}} 復制代碼

編寫xml配置文件

配置應用名稱

<dubbo:application name="demo-provider"/> 復制代碼

配置注冊中心

可以使用Multicast、Redis、Zookeeper、Simple這四個作為注冊中心。

<dubbo:registry address="multicast://224.5.6.7:1234"/> 復制代碼

配置協議

默認為dubbo

<dubbo:protocol name="dubbo" port="20880"/> 復制代碼

定義bean

然后定義bean,以及將bean作為服務暴露出去

<bean id="demoService" class="com.learnDubbo.demo.provider.DemoServiceImpl"/><dubbo:service interface="com.learnDubbo.demo.DemoService" ref="demoService"/> 復制代碼

main函數

編寫一個main函數用于啟動服務提供者

public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-provider.xml");context.start();System.in.read();//用于阻塞函數,使其一直運行 } 復制代碼

服務消費者

服務消費者需要調用service-provider 服務提供者提供的DemoService實現類 同樣需要編寫xml文件,配置文件和服務提供者的類似,不同的是需要將暴露服務的配置修改為引用服務的配置,如下

引用服務

<dubbo:reference id="demoService" interface="com.learnDubbo.demo.DemoService"/> 復制代碼

main函數

編寫一個main函數用于啟動服務消費者,然后一直循環調用服務提供者提供的服務

public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-consumer.xml");context.start();DemoService demoService = (DemoService) context.getBean("demoService"); // 調用服務提供者提供的服務while (true) {try {Thread.sleep(1000);String hello = demoService.sayHello("Dubbo"); // call remote methodSystem.out.println(hello); // get result} catch (Throwable throwable) {throwable.printStackTrace();}} } 復制代碼

測試

先啟動service-provider項目,然后在啟動service-consumer,輸出結果如下

搭建一個注解的Dubbo項目

服務提供者和服務消費者共用的接口還是使用service-api,新建下面兩個項目

  • service-consumer-annotation 基于注解的服務消費者

  • service-provider-annotation 基于注解的服務提供者

基于注解的服務提供者

新建一個springboot項目 同樣需要提供一個DemoService的實現類,且在類上增加@Service注解

注:是com.alibaba.dubbo.config.annotation.Service 不是org.springframework.stereotype.Service 別導錯了

接下來需要增加dubbo的配置類

@Configuration public class DubboConfiguration {/*** 對應xml配置:<dubbo:application name="demo-provider"/>* @return*/@Beanpublic ApplicationConfig applicationConfig() {ApplicationConfig applicationConfig = new ApplicationConfig();applicationConfig.setName("demo-provider--annotation");return applicationConfig;}/*** 對應xml配置:<dubbo:registry address="multicast://224.5.6.7:1234"/>* @return*/@Beanpublic RegistryConfig registryConfig() {RegistryConfig registryConfig = new RegistryConfig();registryConfig.setAddress("multicast://224.5.6.7:1234");return registryConfig;} } 復制代碼

最后一步在啟動類上增加注解@DubboComponentScan(basePackages = "com.learnDubbo.demo.provider.service")basePackages自行修改為提供服務類所在的包路徑

基于注解的服務消費者

也是需要有一個配置類,和服務提供者類似,這里就不貼代碼了
接下來創建一個Controller,用于測試結果,代碼如下

@RestController public class DemoController {@Referenceprivate DemoService demoService;@GetMapping("sayHello")public String sayHello(){return demoService.sayHello("Dubbo");} } 復制代碼

@Reference注解表示引用服務類似于xml配置

<dubbo:reference id="demoService" interface="com.learnDubbo.demo.DemoService"/> 復制代碼

在項目啟動類上同樣需要注解@DubboComponentScan指定dubbo掃描路徑

測試

同xml配置的一樣,需要先啟動服務提供者


配置信息

配置信息主要包括3大塊,注冊中心、協議和schema配置

注冊中心

注冊中心總共有4個,如下

注冊中心簡要說明dubbo文檔介紹
Multicast不需要啟動任何中心節點,只要廣播地址一樣,就可以互相發現。鏈接
zookeeperApacahe Hadoop 的子項目,是一個樹型的目錄服務,支持變更推送,適合作為 Dubbo 服務的注冊中心,工業強度較高,可用于生產環境,并推薦使用。鏈接
Redis一個高效的 KV 存儲服務器 , 從?2.1.0?版本開始支持 。鏈接
Simple一個普通的 Dubbo 服務,可以減少第三方依賴,使整體通訊方式一致。鏈接

使用Redis注冊中心

當使用Redis注冊中心,需先把服務提供方和消費放的注冊中心xml配置修改為下方

<dubbo:registry address="redis://localhost:6379"/> 復制代碼

對應的redis會產生如下數據

可以看到有兩個key,分別對應服務提供者和消費者。兩個key對應的數據類型為Hash,可以看到服務消費者key的數據如下

1) "consumer://192.168.79.170/com.learnDubbo.demo.DemoService?application=demo-consumer&category=consumers&check=false&dubbo=2.6.2&interface=com.learnDubbo.demo.DemoService&methods=sayHello&pid=14208&side=consumer&timestamp=1534389723130" 2) "1534389813690" 復制代碼

第一個為URL址,第二個為過期時間。
官網給的圖如下

使用Zookeeper注冊中心

當使用Zookeeper注冊中心,需先把服務提供方和消費放的注冊中心xml配置修改為下方

<dubbo:registry address="zookeeper://localhost:2181"/> 復制代碼

對應的Zookeeper會產生如下數據

下圖是官網給出的數據圖

有些出入,但大致還是相同的,多了configurators和routers。 當服務提供者啟動時: 會創建對應的目錄結構,例如我上面代碼中的共用接口名為com.learnDubbo.demo.DemoService,就會創建 /dubbo/com.learnDubbo.demo.DemoService目錄,然后在創建providers目錄,再在providers目錄下寫入自己的 URL 地址。
當服務消費者啟動時:會在/dubbo/com.learnDubbo.demo.DemoService目錄創建 consumers目錄,并在consumers目錄寫入自己的 URL 地址。
當監控中心啟動時: 訂閱 /dubbo/com.learnDubbo.demo.DemoService 目錄下的所有提供者和消費者 URL 地址。

協議

協議簡要說明dubbo文檔介紹
dubboDubbo 缺省協議采用單一長連接和 NIO 異步通訊,適合于小數據量大并發的服務調用,以及服務消費者機器數遠大于服務提供者機器數的情況。鏈接
rmiRMI 協議采用 JDK 標準的?java.rmi.*?實現,采用阻塞式短連接和 JDK 標準序列化方式。鏈接
hessianHessian 協議用于集成 Hessian 的服務,Hessian 底層采用 Http 通訊,采用 Servlet 暴露服務,Dubbo 缺省內嵌 Jetty 作為服務器實現。鏈接
http基于 HTTP 表單的遠程調用協議,采用 Spring 的 HttpInvoker 實現。鏈接
webservice基于 WebService 的遠程調用協議,基于 Apache CXF 的 frontend-simple 和 transports-http 實現 。鏈接
thrift當前 dubbo 支持的 thrift 協議是對 thrift 原生協議的擴展,在原生協議的基礎上添加了一些額外的頭信息,比如 service name,magic number 等。鏈接
memcached基于 memcached實現的 RPC 協議。鏈接
redis基于 Redis 實現的 RPC 協議。鏈接
rest基于標準的Java REST API——JAX-RS 2.0(Java API for RESTful Web Services的簡寫)實現的REST調用支持鏈接

schema配置的涉及的東西有點多這里就不列出來了


參考資料:Dubbo官網

官網的介紹都很詳細了,從官網中一般都能獲取到你想到的信息。

有需要查看這篇博文的源碼的可以點這里:Github地址

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Dubbo项目入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。