成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

俯瞰Dubbo全局,閱讀源碼前必須掌握這些!!

開發(fā) 架構
作者個人研發(fā)的在高并發(fā)場景下,提供的簡單、穩(wěn)定、可擴展的延遲消息隊列框架,具有精準的定時任務和延遲隊列處理功能。

[[373950]]

作者個人研發(fā)的在高并發(fā)場景下,提供的簡單、穩(wěn)定、可擴展的延遲消息隊列框架,具有精準的定時任務和延遲隊列處理功能。自開源半年多以來,已成功為十幾家中小型企業(yè)提供了精準定時調度方案,經受住了生產環(huán)境的考驗。為使更多童鞋受益,現(xiàn)給出開源框架地址:

https://github.com/sunshinelyz/mykit-delay

既然是要寫深度解析Dubbo源碼的系列專題,我們首先要做的就是搭建一套Dubbo的源碼環(huán)境,正所謂“工欲善其事,必先利其器”。但是,為了更好的理解Dubbo,我將本文重點分成三個部分:Dubbo中的核心角色、搭建Dubbo源碼環(huán)境、Dubbo核心模塊說明、運行Dubbo的示例程序 四個部分。說干就干,上重點。

注:本系列專題,我是基于Dubbo 2.7.8版本進行源碼分析的。

Dubbo中的核心角色

為了更好的說明Dubbo中的核心角色,這里,我就直接引用一張Dubbo的依賴關系圖。

注:圖片來自Dubbo官網。

從Dubbo的依賴關系圖中,我們可以看出,Dubbo主要由四部分構成:Registry、Provider、Consumer和Monitor 。接下來,我們就分別對這四部分進行簡單的介紹。

  • Registry,注冊中心。在Dubbo中,注冊中心負責服務的注冊與發(fā)現(xiàn),主要就是針對服務地址的注冊與查找。值得一提的是,在Dubbo中,Provider和Consumer只有在服務啟動的時候與注冊中心進行交互。之后,注冊中心通過長連接的形式來感知Provider的存在,如果Provider宕機或不可用,注冊中心就會立即推送相關的事件來告知Consumer。
  • Provider,服務的提供者。Provider在啟動的時候,會向注冊中心注冊自己的相關服務,主要是通過將自身的服務地址和相關的配置信息封裝成URL添加到Zookeeper等服務中。
  • Consumer,服務的消費者。Consumer在啟動的時候,會向注冊中心訂閱其關注的服務。主要是向Zookeeper等服務中獲取Provider注冊的URL,并且在Zookeeper等服務中添加相應的監(jiān)聽器。獲取到Provider注冊的URL之后,Consumer就會通過負載均衡算法從獲取的多個Provider中選擇一個,并與其建立連接,發(fā)起RPC調用。如果Zookeeper等服務中注冊的Provider發(fā)生了變更,Consumer就會通過在注冊中心中添加的監(jiān)聽器來獲取最新的Provider信息。而且Consumer會緩存Provider的信息,如果Consumer與Provider一旦建立起連接,即使注冊中心宕機或不可用,也不會影響Consumer和Provider之間的交互。
  • Monitor:監(jiān)控中心。主要用來統(tǒng)計Dubbo服務的調用次數(shù)和調用的時間。在Dubbo的核心架構中,監(jiān)控中心不是必需的,監(jiān)控中心宕機或不可用不會影響Dubbo的整體服務。
  • 好了,對于Dubbo的核心角色我們就介紹到這兒,更多的信息,小伙伴們可以參見Dubbo的官方文檔。

搭建Dubbo源碼環(huán)境

我們可以使用如下命令將github的源碼下載的本地。

  1. git clone https://github.com/apache/dubbo.git 

接下來,將Dubbo的源碼切換到2.7.8

  1. git checkout -b dubbo-2.7.8 dubbo-2.7.8 

使用Maven進行編譯

  1. mvn clean install -Dmaven.test.skip=true  

轉換成IDEA項目,這里我使用的是IDEA分析Dubbo源碼。

  1. mvn idea:idea 

接下來,我們就可以將Dubbo源碼導入到IDEA了。

說了這么多,其中還有一種方式就是通過瀏覽器直接下載Dubbo 2.7.8的源碼到本地。

在瀏覽器中打開鏈接:https://github.com/apache/dubbo/releases/tag/dubbo-2.7.8 下載Dubbo源碼。

這里下載zip壓縮包和tar.gz壓縮包均可,下載到本地后解壓,將其導入到IDEA中即可。

導入完成后,我們看到的項目結構如下所示。

接下來,我們就對Dubbo源碼中的核心模塊進行簡單的介紹。

Dubbo核心模塊說明

dubbo-common模塊

Dubbo的公共模塊,提供了Dubbo SPI的實現(xiàn)、時間輪的實現(xiàn)、動態(tài)編譯等通用的功能。

dubbo-remoting模塊

Dubbo的遠程通信模塊,其中,dubbo-remoting-api是對整個模塊的核心抽象,其他子模塊基于其他開源框架對dubbo-remoting-api進行實現(xiàn)。

dubbo-rpc模塊

Dubbo的RPC模塊,依賴dubbo-remoting模塊。其中,dubbo-remoting-api是整個dubbo-rpc模塊的核心抽象,其他模塊是對dubbo-remoting-api的實現(xiàn)。

dubbo-registry模塊

Dubbo中與注冊中心交互的模塊。其中dubbo-registry-api是整個dubbo-registry的核心抽象,其他模塊是對dubbo-registry-api的具體實現(xiàn)。

dubbo-config模塊

Dubbo中解析對外暴露的配置的模塊。其中,dubbo-config-api 子模塊負責處理以API 方式使用Dubbo時的相關配置,dubbo-config-spring 子模塊負責處理與 Spring 集成使用時的相關配置方式。

dubbo-metadata模塊

Dubbo中的元數(shù)據(jù)模塊。其中,dubbo-metadata-api是對整個dubbo-metadata的抽象,其他模塊是對dubbo-metadata-api的實現(xiàn)。

dubbo-configcenter模塊

Dubbo的配置中心模塊,其中,提供了多種服務發(fā)現(xiàn)的方式并接入了多種服務發(fā)現(xiàn)組件。

dubbo-monitor模塊

Dubbo 的監(jiān)控模塊,主要用于統(tǒng)計服務調用次數(shù)、調用時間以及實現(xiàn)調用鏈跟蹤的服務。

dubbo-cluster模塊

Dubbo的集群管理模塊,主要提供負載均衡、容錯、路由等功能。

運行Dubbo示例程序

在Dubbo源碼中,有一個示例程序模塊dubbo-demo,在運行dubbo-demo模塊中的示例前,我們先在本地啟動一個Zookeeper作為注冊中心。

注:小伙伴們可以自行到Apache官網下載Zookeeper。

Dubbo示例程序結構

Dubbo提供的示例程序的總體結構如下所示。

我們來看看dubbo-demo下有哪些模塊。

  • dubbo-demo-interface:Dubbo示例定義的業(yè)務接口。
  • dubbo-demo-xml:提供了基于Spring XML的使用示例。
  • dubbo-demo-annotation:提供了基于Spring注解方式的使用示例。
  • dubbo-demo-api:提供了以API方式使用Dubbo的示例。

其中,dubbo-demo-xml、dubbo-demo-annotation和dubbo-demo-api模塊都是依賴dubbo-demo-interface模塊的。

接下來,我們就對dubbo-demo-interface模塊和dubbo-demo-annotation模塊的核心代碼進行簡單的介紹,并運行相關的示例程序。小伙伴們可自行分析和運行dubbo-demo-xml和dubbo-demo-api中的示例程序并運行相關的代碼。

(1)dubbo-demo-interface:定義了業(yè)務接口。

其中,DemoService接口的核心代碼如下所示。

  1. package org.apache.dubbo.demo; 
  2. import java.util.concurrent.CompletableFuture; 
  3. public interface DemoService { 
  4.     //同步調用 
  5.     String sayHello(String name); 
  6.     //異步調用 
  7.     default CompletableFuture<String> sayHelloAsync(String name) { 
  8.         return CompletableFuture.completedFuture(sayHello(name)); 
  9.     } 

(2)dubbo-demo-annotation:提供了基于Spring注解的示例程序。

Provider代碼

我們先來看dubbo-demo-annotation-provider模塊,也就是服務的提供者。其DemoServiceImpl的代碼如下所示。

  1. @DubboService 
  2. public class DemoServiceImpl implements DemoService { 
  3.     private static final Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class); 
  4.  
  5.     @Override 
  6.     public String sayHello(String name) { 
  7.         logger.info("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress()); 
  8.         return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress(); 
  9.     } 
  10.  
  11.     @Override 
  12.     public CompletableFuture<String> sayHelloAsync(String name) { 
  13.         return null
  14.     } 

Application類的代碼如下所示。

  1. public class Application { 
  2.     public static void main(String[] args) throws Exception { 
  3.         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ProviderConfiguration.class); 
  4.         context.start(); 
  5.         System.in.read(); 
  6.     } 
  7.  
  8.     @Configuration 
  9.     @EnableDubbo(scanBasePackages = "org.apache.dubbo.demo.provider"
  10.     @PropertySource("classpath:/spring/dubbo-provider.properties"
  11.     static class ProviderConfiguration { 
  12.         @Bean 
  13.         public RegistryConfig registryConfig() { 
  14.             RegistryConfig registryConfig = new RegistryConfig(); 
  15.             registryConfig.setAddress("zookeeper://127.0.0.1:2181"); 
  16.             return registryConfig; 
  17.         } 
  18.     } 

Consumer代碼

接下來,我們來看看dubbo-demo-annotation-consumer模塊的代碼,也就是服務消費者的示例代碼。其中,DemoServiceComponent類的代碼如下所示。

  1. @Component("demoServiceComponent"
  2. public class DemoServiceComponent implements DemoService { 
  3.     @DubboReference 
  4.     private DemoService demoService; 
  5.  
  6.     @Override 
  7.     public String sayHello(String name) { 
  8.         return demoService.sayHello(name); 
  9.     } 
  10.     @Override 
  11.     public CompletableFuture<String> sayHelloAsync(String name) { 
  12.         return null
  13.     } 

Application類的代碼如下所示。

  1. public class Application { 
  2.     public static void main(String[] args) { 
  3.         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConsumerConfiguration.class); 
  4.         context.start(); 
  5.         DemoService service = context.getBean("demoServiceComponent", DemoServiceComponent.class); 
  6.         String hello = service.sayHello("world"); 
  7.         System.out.println("result :" + hello); 
  8.     } 
  9.  
  10.     @Configuration 
  11.     @EnableDubbo(scanBasePackages = "org.apache.dubbo.demo.consumer.comp"
  12.     @PropertySource("classpath:/spring/dubbo-consumer.properties"
  13.     @ComponentScan(value = {"org.apache.dubbo.demo.consumer.comp"}) 
  14.     static class ConsumerConfiguration { 
  15.  
  16.     } 

運行Dubbo示例程序

我們先在本地啟動Zookeeper,然后分別運行dubbo-demo-annotation-provider模塊的Application類和dubbo-demo-annotation-consumer模塊的Application類。

此時在IDEA的控制臺會輸出如下信息。

  1. result :Hello world, response from provider: 192.168.0.5:20880 

Dubbo總結

到這里,我們介紹了Dubbo中的核心角色,如何搭建Dubbo源碼環(huán)境,對Dubbo源碼中的核心模塊進行了簡單的說明,并簡單的分析了Dubbo的示例程序并運行了示例程序。其中,在介紹和運行示例程序時,我們重點介紹了dubbo-demo-annotation示例模塊,小伙伴們可自行分析和運行其他示例模塊。在后續(xù)的文章中分析源碼時,我們也主要是通過debug Dubbo的示例程序的方式進行。

本文轉載自微信公眾號「冰河技術」,可以通過以下二維碼關注。轉載本文請聯(lián)系冰河技術公眾號。

 

責任編輯:武曉燕 來源: 冰河技術
相關推薦

2023-06-21 08:24:46

2018-11-30 14:47:13

2020-12-02 08:30:46

MySQL索引哈希表

2025-03-28 08:34:34

2013-12-24 10:05:04

memcached

2023-09-14 11:45:24

HashMap散列表

2025-05-09 01:00:00

分布式限流高并發(fā)

2024-10-28 08:01:11

2022-11-04 13:06:47

JVMJava程序

2012-02-22 21:38:40

2021-12-03 18:04:06

命令 RabbitMQ Web

2017-09-21 12:15:36

機器學習概率學習

2020-07-29 07:28:14

分布式限流系統(tǒng)

2010-11-18 10:55:49

跳槽

2018-11-16 16:35:19

Java源碼編程語言

2021-05-17 06:02:58

Css前端CSS 特效

2019-11-20 10:38:36

路由路由協(xié)議路由器

2023-11-10 11:06:36

Linux命令

2023-09-11 10:06:11

Linux命令

2022-07-19 07:30:06

BigDecimal運算float
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品a| 亚洲欧美精品在线观看 | 最新高清无码专区 | 久久国内精品 | 欧美一区二区久久 | 午夜免费影视 | 久久国内精品 | 欧美日韩电影在线 | 国产精品一区久久久 | 在线不卡一区 | 欧美日一区二区 | 色吊丝2288sds中文字幕 | 日韩一二区 | 国产一区二区三区 | 成人区精品一区二区婷婷 | 久久国产欧美一区二区三区精品 | 真人毛片| 日本在线视频一区二区 | 精品不卡| 91精品国产一区二区 | 99精品久久久久久中文字幕 | 国产精品美女久久久久久久网站 | 成人免费三级电影 | 成人三级在线观看 | 国产美女精品 | 亚洲一二视频 | 久久久久久久久久久久久久av | 精品国产亚洲一区二区三区大结局 | 欧美二区在线 | 夜夜草 | 精品久久精品 | 女人一区| 婷婷色国产偷v国产偷v小说 | 91一区二区 | 免费h在线 | 青青草视频免费观看 | 成人h免费观看视频 | 一区二区在线不卡 | 日韩日韩日韩日韩日韩日韩日韩 | 欧美亚洲免费 | 久久网站免费视频 |