1. 程式人生 > >Dubbo 入門學習筆記

Dubbo 入門學習筆記

aps ace .org 新建 col dmi support 1.0 prot

項目結構

技術分享圖片

模塊介紹:

DubboAPI ----API接口

DubboConsumer ----消費者

DubboProvider ----生產者

DubboAPI Service 提供的接口,
DubboProvider實現了 DubboAPI 接口,並對外開放http端口,DubboConsumer 依賴DubboAPI工程,但是不會直接依賴
DubboProvider工程。 這種可以讓消費者僅僅依賴DubboAPI工程,而不需要對
DubboProvider工程的依賴,也是松耦合的經典

一、創建Root工程

技術分享圖片

下一步

技術分享圖片

下一步

技術分享圖片

點擊完成後的工程目錄

技術分享圖片

然後刪除src文件夾

pom.xml 配置如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>DubboDemons</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Dubbo</name>
  
   <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    
    <!-- spring版本號 -->
    <spring.version>4.2.5.RELEASE</spring.version>
    
    <!-- log4j日誌包版本號 -->
    <slf4j.version>1.7.18</slf4j.version>
    <log4j.version>1.2.17</log4j.version>
    
   </properties>
   
   
   
   <dependencyManagement>
      <dependencies>
	    
	    <!-- 添加junit4依賴 -->
	    <dependency>
	      <groupId>junit</groupId>
	      <artifactId>junit</artifactId>
	      <version>4.11</version>
	    </dependency>
 
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
 
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>
 
   
	    <!-- 添加日誌相關jar包 -->
	    <dependency>
	      <groupId>log4j</groupId>
	      <artifactId>log4j</artifactId>
	      <version>${log4j.version}</version>
	    </dependency>
	    <dependency>
	      <groupId>org.slf4j</groupId>
	      <artifactId>slf4j-api</artifactId>
	      <version>${slf4j.version}</version>
	    </dependency>
	    <dependency>
	      <groupId>org.slf4j</groupId>
	      <artifactId>slf4j-log4j12</artifactId>
	      <version>${slf4j.version}</version>
	    </dependency>
    
	     <dependency>
	         <groupId>commons-logging</groupId>
	         <artifactId>commons-logging</artifactId>
	         <version>1.2</version>
	     </dependency>
    
	    <!-- dubbo -->
	    <dependency>
	      <groupId>com.alibaba</groupId>
	      <artifactId>dubbo</artifactId>
	      <version>2.5.3</version>
	      <exclusions>
	        <exclusion>
	          <groupId>org.springframework</groupId>
	          <artifactId>spring</artifactId>
	        </exclusion>
	      </exclusions>
	    </dependency>
    
    	<!-- Zookeeper zkclient-->
		<dependency>
		    <groupId>com.github.sgroschupf</groupId>
		    <artifactId>zkclient</artifactId>
		    <version>0.1</version>
		</dependency>
    
   </dependencies>
  </dependencyManagement>


  
</project>

  

二、創建API項目

新建一個Maven Module

技術分享圖片

下一步

技術分享圖片

下一步

技術分享圖片

下一步

技術分享圖片

點擊完成

DubboDemons的工程pom.xml會自動增加Module: DubboAPI

技術分享圖片

而DubboAPI會增加parent

技術分享圖片

然後在DubboAPI項目向,右鍵->Run AS->Maven install

三、創建provider(生產者)

技術分享圖片

下一步

技術分享圖片

下一步

技術分享圖片

點擊完成

pom.xml

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.example</groupId>
    <artifactId>DubboDemons</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>com.example</groupId>
  <artifactId>DubboProvider</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>DubboProvider</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
  
  	<dependency>
	    	<groupId>com.example</groupId>
	    	<artifactId>DubboAPI</artifactId>
	    	<version>0.0.1-SNAPSHOT</version>
        </dependency>
        
        <dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
		</dependency>
 
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
		</dependency>
		
		
		<!-- 添加日誌相關jar包 -->
	    <dependency>
	      <groupId>log4j</groupId>
	      <artifactId>log4j</artifactId>
	    </dependency>
	    <dependency>
	      <groupId>org.slf4j</groupId>
	      <artifactId>slf4j-api</artifactId>
	    </dependency>
	    <dependency>
	      <groupId>org.slf4j</groupId>
	      <artifactId>slf4j-log4j12</artifactId>
	    </dependency>
    
	     <!-- dubbo -->
	    <dependency>
	      <groupId>com.alibaba</groupId>
	      <artifactId>dubbo</artifactId>
	      <exclusions>
	        <exclusion>
	          <groupId>org.springframework</groupId>
	          <artifactId>spring</artifactId>
	        </exclusion>
	      </exclusions>
	    </dependency>
    
    	<!-- Zookeeper zkclient-->
		<dependency>
		    <groupId>com.github.sgroschupf</groupId>
		    <artifactId>zkclient</artifactId>
		</dependency>



    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

  

四、創建consumer(消費者)

技術分享圖片

下一步

技術分享圖片

下一步

技術分享圖片

pom.xml 文件

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.example</groupId>
    <artifactId>DubboDemons</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>com.example</groupId>
  <artifactId>DubboConsumer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>DubboConsumer</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version><!--$NO-MVN-MAN-VER$-->
      <scope>test</scope>
    </dependency>
    
    
      <dependency>
    	<groupId>com.example</groupId>
    	<artifactId>DubboAPI</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
     </dependency>
    
    <dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
    </dependency>
 
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aop</artifactId>
	</dependency>
	
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context-support</artifactId>
	</dependency>
 
    <!-- dubbo -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
   
   	<!-- Zookeeper zkclient-->
	<dependency>
	    <groupId>com.github.sgroschupf</groupId>
	    <artifactId>zkclient</artifactId>
	</dependency>
    
  </dependencies>


</project>

  

創建完成後,

技術分享圖片

修改設置

技術分享圖片

顯示如下

技術分享圖片

五、定義接口API,bo對象,公共類及方法

這些是提供方和調用方都需要的

在DubboAPI模塊中創建一個接口對外開放。 獲得用戶信息接口getUserInfo

技術分享圖片

六、定義Dubbo服務service,實現DubbpAPI中的api接口,書寫業務邏輯及DB操作。通過spring暴露服務。

在DubbboProvider模塊中創建UserService的實現類UserServiceImpl

DubboProvider模塊的啟動類

public class App 
{
    public static void main( String[] args ) throws IOException
    {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:provider.xml");
        System.out.println(context.getDisplayName());
        context.start();
        System.out.println("服務已經啟動");
        System.in.read();
    }
}

  

增加Provider.xml /src/main/resources文件夾下

<?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://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
       
       
    <!--定義了提供方應用信息,用於計算依賴關系;在 dubbo-admin 或 dubbo-monitor 會顯示這個名字,方便辨識-->
    <dubbo:application name="demotest-provider" owner="programmer" organization="dubbox"/>
    <!--使用 zookeeper 註冊中心暴露服務,註意要先開啟 zookeeper-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!-- 用dubbo協議在20880端口暴露服務 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!--使用 dubbo 協議實現定義好的 api.PermissionService 接口-->
    <dubbo:service interface="org.dubbo.api.UserService" ref="userService" protocol="dubbo" />
    <!--具體實現該接口的 bean-->
    <bean id="userService" class="org.dubbo.provider.impl.UserServiceImpl"/>
</beans>

   

發現eclipse出錯

技術分享圖片

解決方法:

下載一個dubbo.xsd 文件

下載路徑:https://pan.baidu.com/s/16N0PDU0zcyFWlMa2PML1OA

windows->preferrence->xml->xmlcatalog

add->catalog entry ->file system 選擇剛剛下載的文件路徑

技術分享圖片

七、定義調用端也叫消費端,實現對應的控制層。通過spring獲取服務

啟動類

public class App 
{
	 public static void main( String[] args ) throws IOException
	    {
	        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:consumer.xml");
	        System.out.println(context.getDisplayName());
	        context.start();
	        System.out.println("消費服務已經啟動");
	        UserService userService = (UserService)context.getBean(UserService.class);
	        System.out.println(userService.getUserInfo("Nick"));
	        
	    }
}

  

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:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
    <dubbo:application name="demotest-consumer" owner="programmer" organization="dubbox"/>
    <!--向 zookeeper 訂閱 provider 的地址,由 zookeeper 定時推送-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!--使用 dubbo 協議調用定義好的 api.PermissionService 接口-->
    <dubbo:reference id="permissionService" interface="org.dubbo.api.UserService"/>
    
</beans>

  

八、啟動Zookeeper

九、啟動Dubbo的service端,即Provider

啟動Zookeeper後,啟動DubboProvider

技術分享圖片

十、啟動Consumer端

啟動DubboConsumer中的App類

技術分享圖片

參考:https://blog.csdn.net/u011781521/article/details/76337893

Dubbo 入門學習筆記