Dubbo 入門學習筆記
項目結構
模塊介紹:
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 入門學習筆記