dubbo入門學習

官方網址:http://dubbo.apache.org/zh-cn/index.html

學習可以參考官網中文文檔:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

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

1 如果項目表現層、服務層是不同的項目,可以使用dubbo實現兩個系統之間的通信。服務層和表現層相互通信,使用dubbo中間件,讓表現層調用服務層。工程之間的相互通信可以使用dubbo,,可以統一管理服務,系統之間的調用。
2 如何實現遠程通信。
3   1、Webservice,效率不高,基於soap協議,項目中不推薦使用。
4   2、使用restful形式的服務,http+json,很多項目中應用。如果服務太多,服務之間的調用關係混亂,需要治療服務。
5   3、dubbo,使用rpc協議進行遠程調用,直接使用socket通信,傳輸效率高,並且可以統計出系統之間的調用關係,調用次數。缺點,由於是java開發,只能是兩個java項目進行調度。

2、dubbo架構。術語來自官網。可以直接查看官網。

節點角色說明
節點角色說明
Provider 暴露服務的服務提供方
Consumer 調用遠程服務的服務消費方
Registry 服務註冊與發現的註冊中心
Monitor 統計服務的調用次數和調用時間的監控中心
Container 服務運行容器

 

調用關係說明
  1. 服務容器負責啓動,加載,運行服務提供者。
  2. 服務提供者在啓動時,向註冊中心註冊自己提供的服務。
  3. 服務消費者在啓動時,向註冊中心訂閱自己所需的服務。
  4. 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。
  5. 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
  6. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

Dubbo 架構具有以下幾個特點,分別是連通性、健壯性、伸縮性、以及向未來架構的升級性。

3、註冊中心(推薦zookeeper,也可以使用redis的呢)
  註冊中心負責服務地址得註冊與查找,相當於目錄服務,服務提供者和消費者只在啓動得時候與註冊中心交互,註冊中心不轉發請求,壓力較小,使用dubbo2.3.3以上版本,建議使用zookeeper註冊中心。zookeeper是一個樹形的目錄服務,支持變更推送,適合作爲dubbo服務的註冊中心,工業強度高,可以用於生產環境,推薦使用。

4、安裝zookeeper,必須首先安裝jdk,這裏安裝jdk1.7版本。首先將安裝包上傳到機器上面哦。

[root@localhost jdk1.7.0_55]# tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/soft

[root@localhost ~]# vim /etc/profile

1 export JAVA_HOME=/home/hadoop/soft/jdk1.7.0_55
2 export PATH=$PATH:$JAVA_HOME/bin


[root@localhost ~]# source /etc/profile

[root@localhost ~]# java

[root@localhost ~]# javac

[root@localhost ~]# java -version

5、開始安裝zookeeper,首先將安裝包上傳到機器上面哦。

解壓縮操作哦。

[root@localhost package]# tar -zxvf zookeeper-3.4.6.tar.gz -C /home/hadoop/soft/

然後配置一下zookeeper,就可以啓動zookeeper了。

首先創建一個data文件夾。

配置完成了,就可以啓動zookeeper。進行驗證是否可以正常啓動。

1 [root@localhost bin]# ./zkServer.sh start
2 JMX enabled by default
3 Using config: /home/hadoop/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
4 Starting zookeeper ... STARTED
5 [root@localhost bin]# ./zkServer.sh status
6 JMX enabled by default
7 Using config: /home/hadoop/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
8 Mode: standalone
9 [root@localhost bin]#

[root@localhost bin]# ./zkServer.sh start    啓動
[root@localhost bin]# ./zkServer.sh status    查看啓動狀態
[root@localhost bin]# ./zkServer.sh stop    關閉

6、zookeeper安裝成功以後,就可以操作,服務如何發佈,客戶端如何引用服務。

Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何api侵入,只需要用spring加載dubbo的配置即可,dubbo基於spring的schema擴展進行加載。
遠程服務。在本地服務的基礎上,只需要簡單的配置,即可以完成遠程話。
將傳統寫的xml配置文件中的bean注入以及bean的依賴注入的配置拆分成兩份,將服務定義部分放在服務提供方remote-provider.xml,將服務引用部分放在服務消費方remote-consumer.xml配置文件中。並在提供方增加暴漏服務配置<dubbo:service>,在消費方增加引用服務配置<dubbo:reference>。官網截圖:

 7、發佈dubbo服務。定義一個接口。

 1 package com.taotao.service;
 2 
 3 import com.taotao.pojo.TbItem;
 4 
 5 /**
 6  * 
 7  * @ClassName: ItemService.java
 8  * @author: biehl
 9  * @since: 2019年8月2日 下午3:32:36
10  * @Copyright: ©2019 biehl 版權所有
11  * @version: 0.0.1
12  * @Description:商品接口類
13  * 
14  */
15 public interface ItemService {
16 
17     /**
18      * 根據itemId查詢出商品信息
19      * 
20      * @param itemId
21      * @return
22      */
23     public TbItem getItemById(long itemId);
24     
25 }

定義實現接口的實現類。

 1 package com.taotao.service.impl;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Service;
 5 import org.springframework.util.StringUtils;
 6 
 7 import com.taotao.mapper.TbItemMapper;
 8 import com.taotao.pojo.TbItem;
 9 import com.taotao.service.ItemService;
10 
11 /**
12  * 
13  * @ClassName: ItemServiceImpl.java
14  * @author: biehl
15  * @since: 2019年8月2日 下午3:51:24
16  * @Copyright: ©2019 biehl 版權所有
17  * @version: 0.0.1
18  * @Description: 商品實現類
19  */
20 @Service
21 public class ItemServiceImpl implements ItemService {
22 
23     @Autowired
24     private TbItemMapper tbItemMapper;
25 
26     @Override
27     public TbItem getItemById(long itemId) {
28         TbItem tbItem = new TbItem();
29         if (!StringUtils.isEmpty(itemId)) {
30             tbItem = tbItemMapper.selectByPrimaryKey(itemId);
31         }
32         // 返回信息以後就可以發佈服務
33         return tbItem;
34     }
35 
36 }

 配置提供dubbo的服務。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:aop="http://www.springframework.org/schema/aop"
 6     xmlns:tx="http://www.springframework.org/schema/tx"
 7     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 8     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 9     xsi:schemaLocation="http://www.springframework.org/schema/beans 
10     http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
11     http://www.springframework.org/schema/context 
12     http://www.springframework.org/schema/context/spring-context-4.2.xsd
13     http://www.springframework.org/schema/aop 
14     http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 
15     http://www.springframework.org/schema/tx 
16     http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
17     http://code.alibabatech.com/schema/dubbo 
18     http://code.alibabatech.com/schema/dubbo/dubbo.xsd
19     http://www.springframework.org/schema/util 
20     http://www.springframework.org/schema/util/spring-util-4.2.xsd">
21 
22     <!-- 1、配置包掃描器,掃描所有帶@Service註解的類,將創建的對象放到Spring容器中 -->
23     <!-- 也可以將子包掃描進去 -->
24     <!-- 將掃描com.taotao.service、com.taotao.service.impl -->
25     <context:component-scan
26         base-package="com.taotao.service"></context:component-scan>
27 
28     <!-- 配置spring的事務,單獨提取出來 -->
29 
30     <!-- 發佈dubbo服務 -->
31     <!-- 提供方應用信息,用於計算依賴關係 -->
32     <dubbo:application name="taotao-manager" />
33     <!-- 註冊中心的地址 -->
34     <dubbo:registry protocol="zookeeper" address="192.168.110.140:2181" />
35     <!-- 用dubbo協議在20880端口暴露服務 -->
36     <dubbo:protocol name="dubbo" port="20880" />
37     <!-- 聲明需要暴露的服務接口 -->
38     <!-- ref="itemServiceImpl"就是掃描service的時候,注入到容器的bean -->
39     <dubbo:service interface="com.taotao.service.ItemService" ref="itemServiceImpl" timeout="300000" />
40     <!-- <dubbo:service interface="com.taotao.service.ItemCatService" ref="itemCatServiceImpl" timeout="300000" /> -->
41 
42     
43     
44     
45     
46 
47 </beans>    

如圖所示:

8、在表現層引用dubbo的服務。提供方和引用方都需要引入dubbo的jar包哦。

 1 <!-- dubbo相關 -->
 2 <dependency>
 3     <groupId>com.alibaba</groupId>
 4     <artifactId>dubbo</artifactId>
 5     <!-- 排除spring的2.5.6版本,netty3.2.5版本,避免衝突 -->
 6     <exclusions>
 7         <exclusion>
 8             <groupId>org.springframework</groupId>
 9             <artifactId>spring</artifactId>
10         </exclusion>
11         <exclusion>
12             <groupId>org.jboss.netty</groupId>
13             <artifactId>netty</artifactId>
14         </exclusion>
15     </exclusions>
16 </dependency>
17 <dependency>
18     <groupId>org.apache.zookeeper</groupId>
19     <artifactId>zookeeper</artifactId>
20 </dependency>
21 <dependency>
22     <groupId>com.github.sgroschupf</groupId>
23     <artifactId>zkclient</artifactId>
24 </dependency>

配置一下引用方的配置。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:context="http://www.springframework.org/schema/context"
 6     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 7     xmlns:mvc="http://www.springframework.org/schema/mvc"
 8     xsi:schemaLocation="http://www.springframework.org/schema/beans 
 9         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
10         http://www.springframework.org/schema/mvc 
11         http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
12         http://code.alibabatech.com/schema/dubbo 
13         http://code.alibabatech.com/schema/dubbo/dubbo.xsd
14         http://www.springframework.org/schema/context 
15         http://www.springframework.org/schema/context/spring-context-4.2.xsd">
16 
17     <!-- 1、加載屬性文件 -->
18     <!-- <context:property-placeholder location="classpath:resource/resource.properties"/> -->
19     
20     <!-- 2、配置註解驅動 -->
21     <mvc:annotation-driven />
22     
23     <!-- 3、視圖解析器 -->
24     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
25         <property name="prefix" value="/WEB-INF/jsp/" />
26         <property name="suffix" value=".jsp" />
27     </bean>
28     
29     <!-- 4、配置包掃描器,掃描@Controller註解的類 -->
30     <context:component-scan base-package="com.taotao.controller"/>
31     
32     <!-- 5、配置資源映射 -->
33     <mvc:resources location="/css/" mapping="/css/**"/>
34     <mvc:resources location="/js/" mapping="/js/**"/>
35     
36     <!-- 6、多媒體解析器 -->
37     <!-- 配置文件上傳解析器 -->
38     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
39         <!-- 設定默認編碼 -->
40         <property name="defaultEncoding" value="UTF-8"></property>
41         <!-- 設定文件上傳的最大值5MB,5*1024*1024 -->
42         <property name="maxUploadSize" value="5242880"></property>
43     </bean>
44     
45     
46     <!-- 引用服務,也要在spring容器中,直接在這裏引用即可 -->
47     <!-- 引用dubbo服務 -->
48     <!-- 名稱不一樣的哦 -->
49     <dubbo:application name="taotao-manager-web"/>
50     <dubbo:registry protocol="zookeeper" address="192.168.110.140:2181"/>    
51     <dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />
52     <!-- <dubbo:reference interface="com.taotao.service.ItemCatService" id="itemCatService" />
53     <dubbo:reference interface="com.taotao.content.service.ContentCategoryService" id="contentCategoryService" />
54     <dubbo:reference interface="com.taotao.content.service.ContentService" id="contentService" />
55     <dubbo:reference interface="com.taotao.search.service.SearchItemService" id="searchItemService" /> -->
56     
57     
58     
59     
60 </beans>      
 1 package com.taotao.controller;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.web.bind.annotation.PathVariable;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 import org.springframework.web.bind.annotation.ResponseBody;
 8 
 9 import com.taotao.pojo.TbItem;
10 import com.taotao.service.ItemService;
11 
12 /**
13  * 
14  * @ClassName: ItemController.java
15  * @author: biehl
16  * @since: 2019年8月2日 下午5:10:31
17  * @Copyright: ©2019 biehl 版權所有
18  * @version: 0.0.1
19  * @Description:商品信息的控制層邏輯
20  */
21 @Controller
22 public class ItemController {
23 
24     // itemService就是dubbo配置的id="itemService"
25     @Autowired
26     private ItemService itemService;
27 
28     @RequestMapping(value = "/item/{itemId}")
29     @ResponseBody
30     public TbItem getItemById(@PathVariable(value = "itemId") Long itemId) {
31         TbItem tbItem = new TbItem();
32         tbItem = itemService.getItemById(itemId);    
33         return tbItem;
34     }
35 
36 }

9、dubbo服務調用測試。記得關閉dubbo服務器的防火牆,不然急死你。

 

 

 

 

 

 

 

 

 

待續......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章