Java后台技術(Dubbo入門)


  我現在公司提供的產品是即時通訊軟件,因為我從.net桌面應用開發轉崗,從java后台轉項目經理,讓我有幸擁有了后台開發人員所有的權限,所有的后台源碼和技術文檔對我開放,可惜僅在后台待了3周不到,還沒來得及從事后台開發,就被直接安排開始項目經理的工作。雖然現在已經開始從事管理的工作,但是之前熟悉后台源碼時,對后台的技術棧都進行了熟悉,近期將一直更新Java后台的技術棧學習總結。

  今天我要分享的就是Dubbo,Dubbo是阿里巴巴在2011年開源的項目,因為在阿里已經得到廣泛應用,驗證了其穩定性和健壯性,所有被很多公司作為Java后台的RPC框架。

       下面先講解下Dubbo是什么,有什么功能。

  Dubbo 是阿里巴巴公司一個開源的高性能服務框架,致力於提供高性能和透明化的 RPC 遠程服務調用方案,以及 SOA 服務治理方案,使得應用可通過高性能 RPC 實現服務的輸出、輸入功能和 Spring 框架無縫集成。Dubbo 包含遠程通訊、集群容錯和自動發現三個核心部分。

  Dubbo核心功能

  • · 遠程通訊,提供對多種基於長連接的 NIO 框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。
  • · 集群容錯,提供基於接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集群支持。
  • · 自動發現,基於注冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。

  工作模型

 

 上圖很好的體現了Dubbo的工作模型,由服務提供方(Provider)向注冊中心(Registry)注冊服務。當服務消費者(Consumer)需要使用服務時,需要先向注冊中心(Registry)進行訂閱,訂閱后服務消費者(Consumer)就能采用同步方式(invoke)來調用該服務了。

  配置標簽

標簽

用途

解釋

<dubbo:service/>

服務配置

用於暴露一個服務,定義服務的元信息,一個服務可以用多個協議暴露,一個服務也可以注冊到多個注冊中心

<dubbo:reference/>

引用配置

用於創建一個遠程服務代理,一個引用可以指向多個注冊中心

<dubbo:protocol/>

協議配置

用於配置提供服務的協議信息,協議由提供方指定,消費方被動接受

<dubbo:application/>

應用配置

用於配置當前應用信息,不管該應用是提供者還是消費者

<dubbo:module/>

模塊配置

用於配置當前模塊信息,可選

<dubbo:registry/>

注冊中心配置

用於配置連接注冊中心相關信息

<dubbo:monitor/>

監控中心配置

用於配置連接監控中心相關信息,可選

<dubbo:provider/>

提供方配置

當 ProtocolConfig 和 ServiceConfig 某屬性沒有配置時,采用此缺省值,可選

<dubbo:consumer/>

消費方配置

當 ReferenceConfig 某屬性沒有配置時,采用此缺省值,可選

<dubbo:method/>

方法配置

用於 ServiceConfig 和 ReferenceConfig 指定方法級的配置信息

<dubbo:argument/>

參數配置

 

  服務注冊

  我公司產品后台的注冊方法如下

  定義接口

1 public interface HmWorkGroupDubboService
2 {
3         public Long createWorkGroup(Map<String,Object> param);
4         public Long updateWorkGroup(Map<String, Object> param);
5 }

  添加實現

 1   @service(group="pa",version="1.0.0",interfaceClass= HmWorkGroupDubboService.class,timeout=150000)
 2     public class HmWorkGroupDubboServiceImpl implements HmWorkGroupDubboService
 3     {
 4         @override
 5         public Long createWorkGroup(Map<String, Object> param)
 6         {
 7             //業務
 8         }
 9         @override
10         public Long updateWorkGroup(Map<String, Object> param)
11         {
12             //業務
13          }
14 }

  服務配置

  在application.yml中添加

 1 dubbo:
 2   registry:
 3     address:zookeeper://108.20.18.74:2181
 4     
 5   protocal:
 6     port:20861
 7     name:dubbo
 8   application:
 9     name:work
10   config:
11     timeout:5000
12     group:
13       name:pa
14       version:1.0.0
15    consumer:
16     check:false
17    scan:hm.hmp.front.dubbo

  掃描服務

  在啟動函數類上添加@DubboComponentScan標簽

1 @DubboComponentScan("work.dubbo.service")
2 @EnableDubboConfiguration
3 public class Application
4 {
5     public static void main(String[] args)
6     {
7         ///...
8     }
9 }

 

  服務訂閱

  添加配置

  添加配置,在文件dubbo-context.xml中

 1 <!--提供方應用信息-->
 2 <dubbo:application name="hm-admin"/>
 3 <dubbo:monitor protocal="registry"/>
 4 <dubbo:registry address="${zookeeper.config.dubbo}"/>
 5 <!--Dubbo協議暴露服務端口-->
 6 <dubbo:protocal name="dubbo" port="${dubbo.config.port}"/>
 7 <dubbo:consumer check="false"/>
 8 
 9 <!--第三方接口-->
10 <dubbo:reference id="hmWorkGroupDubboService" interface="dubbo.service.HmWorkGroupDubboService" 
11                  generic=""true" group="${dubbo.config.group.txt}" version="${dubbo.config.txt.version}" timeout="150000"/>

  引入配置

1 @Configuration
2 @ImportResource("{dubbo-context.xml}")
3 public class DataSourceConfig{
4   ///
5   }

 

  服務使用

1 GenericService dubboServiceWorkGroup = ApplicationContextUtils.getApplicationContext().getBean("hmWorkGroupDubboService",GenericService.class);
2 Object workGroupResult =   dubboServiceWorkGroup.$invoke("createWorkGroup",new String[]{"java.util.map"},new Object[]{workGroupMap});

 

  相信大家也發現了上面使用的注冊中心時Zookeeper,是因為zookeeper能夠幫助Dubbo實現分布式及負載均衡。

  現在應該已經把Dubbo講解清除了,后續將繼續其他Java技術棧的學習和總結。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM