1. 程式人生 > >使用dubbo實現兩個專案之間的簡單通訊

使用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):完成!