使用dubbo實現兩個專案之間的簡單通訊
關於在win10上安裝的dubbo的上一篇文章已經說過了,點選跳轉
前沿:本片文章只是使用得普通專案,並沒有加入spring boot,沒有war即沒有web專案,後期測試得時候使用官方得方法載入相關得配置檔案即可!
(0):測試專案結構
(1):首先大家可以看官網給出的使用示意圖:
上一篇文章已經說過了,我們的程式碼只需要提高服務提供者和服務消費者,另外的兩個註冊中心和管理控制檯,都是環境配置的
,註冊中心是必須的!管理控制檯隨意(最好安裝,方便檢視與除錯)
(2):既然是兩個專案之前的通訊,那麼我們局需要建立2個專案,因為在後面的通訊時,服務提供者與服務消費者都是使用暴露的介面來找到實現類,所有官方推薦我們將bean和相關介面類放在一個專門給暴露的專案中,其它專案可以使用dependency
來引入改專案,已達到通用的效果!
user-service-provider | 服務提供者(這個專案是實現類) |
user-service-consumer | 服務消費者(這個專案是實現類) |
taobao-interface | 用於暴露服務,其中有user-service-provider的介面,與user-service-consumer的介面! |
我這裡就建立的3個maven的專案
(3):那麼接下來,我們需要在user-service-provider專案和user-service-consumer中使增加dubbo的jar包和zookeeper客戶端
並將taobao-interface專案引入到這兩個專案中去,即pom.xml得檔案需要增加如下依賴(還有javassist.jar)
<dependencies> <dependency> <groupId>cn.gxm.taobao</groupId> <artifactId>taobao-interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- 需要映引入改jar包,否則會初始化失敗,報錯說沒有改jar包 --> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.23.1-GA</version> </dependency> <!-- 第一步引入dubbo依賴 --> <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> </dependency> <!-- 第二步引入zookeeper客戶端 --> <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency>
這裡我需要說明得一點就是我使用得是dubbo得2.6.2得jar包,所以zookeeper得客戶端是zookeeperorg.apache.curator,但是如果是2.5.0以下得需要使用得zookeeper得客戶端是zkclient,即需要更改
(3):接下來我們需要將服務暴露出去!暴露的是介面,但是介面關聯是實現類即可即我們在user-service-provider得src/main/resorces下建立一個provide.xml得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">
<!-- 提供方應用資訊,用於計算依賴關係可以隨意,但是最好和專案名一致,並且不能重複 -->
<dubbo:application name="user-service-provider" />
<!-- 使用zooKeeper廣播註冊中心暴露服務地址,本機得2181埠,
但是如果是在虛擬機器上,根據增加得Ip進行修改即可!
如果使用得不說zookeeper作為註冊中心,需要根據你自己得設定
有如下幾種:
(1)Multicast
(2)zookeeper (官方推薦使用)
(3)Redis
(4)Simple
-->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!--
用dubbo協議在20880埠暴露服務,即在20880埠通訊
name可以根據官方得說明有以下幾種
(1)multicast
(2)zookeeper
(3) redis
(4)simple 如果是這個,name可以省略!
prot
大家隨意!即索命服務提供者和服務消費者在那個埠通訊!
-->
<dubbo:protocol name="dubbo" port="20880" />
<!--
宣告需要暴露的服務介面 (這裡暴露的是介面)
但是介面關聯了實現類,所以等下消費者連線提供者時,使用得就是實體類
-->
<dubbo:service interface="cn.gxm.taobao.serviceInterface.UserService" ref="userServiceImpl" />
<!-- 和本地bean一樣實現服務 -->
<bean id="userServiceImpl" class="cn.gxm.taobao.userService.userServiceImpl" />
</beans>
(4):好了服務提供者已經完成,關於相關實現類我這裡就不說了
在user-service-provice中寫一個載入配置檔案得類!
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
context.start();
System.in.read();
(5):首先執行zookeeper(zkservice.cmd)和minitor得jar包(Java -jar dubbo-admin-0.0.1-SNAPSHOT.jar )執行後,登陸minitor(http://localhost:7001):會出現一個服務提供者!如下:服務提供者為1,消費者為0!
以上就是服務提供者以完成:接下來就是無法消費者:
(6):完成服務消費者得consumer.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:context="http://www.springframework.org/schema/context"
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://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 消費方應用名,用於計算依賴關係,不是匹配條件,不要與提供方一樣,同樣不能重複 -->
<dubbo:application name="order-service-consumer" />
<!-- 使用zookeeper廣播註冊中心暴露發現服務地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!--
生成遠端服務代理,使用提供者暴露的介面與之前在provider.xml中暴露得介面要一樣!
那麼就會使用介面對應得實現類
此時得id。其實很重要,但是們這裡是一個小得demo用不到,後面再做更加複雜得專案時
會用到
-->
<dubbo:reference id="userService"
interface="cn.gxm.taobao.serviceInterface.UserService" />
</beans>
(7):載入consumer.xml執行即可:
package cn.gxm.taobao.orderService;
import java.io.IOException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.gxm.taobao.bean.User;
import cn.gxm.taobao.serviceInterface.OrderService;
import cn.gxm.taobao.serviceInterface.UserService;
public class TestConsumer {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
context.start();
UserService userService = (UserService)context.getBean(UserService.class);
User user = userService.getAddressById(1);
System.out.println(user.toString());
System.out.println("呼叫完成");
System.in.read();
}
}
(8):結果:
(9):完成!