一、簡介
官網:http://dubbo.apache.org/zh-cn/
Dubbo是 [1] 阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和 [2] Spring框架無縫集成。
Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現
二、Dubbo程序(直連式)
業務接口名即服務名稱。無論是服務提供者向服務注冊中心注冊服務,還是服務消費者從注冊中心索取服務,都是通過接口名稱進行注冊與查找的。即,提供者與消費者都依賴於業務接口。所以,一般情況下,會將業務接口專門定義為一個工程,讓提供者與消費者依賴
三、創建業務接口工程00-api
(1)創建業務接口工程00-api
(2)創建業務接口
(3) 修改pom文件
-
<?xml version="1.0" encoding="UTF-8"?>
-
<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>00-api
</groupId>
-
<artifactId>00-api
</artifactId>
-
<version>1.0-SNAPSHOT
</version>
-
-
<properties>
-
<project.build.sourceEncoding>UTF-8
</project.build.sourceEncoding>
-
<maven.compiler.source>1.8
</maven.compiler.source>
-
<maven.compiler.target>1.8
</maven.compiler.target>
-
</properties>
-
-
</project>
四、創建提供者(自建Spring容器)00-api-provider
(1)創建工程
創建一個Maven的Java工程,並命名為00-api-provider
(2) 在pom中導入依賴
主要包含三類依賴:
- 業務接口依賴
- Dubbo依賴(2.7.0版本)
- Spring依賴(4.3.16版本)
-
<?xml version="1.0" encoding="UTF-8"?>
-
<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>00-api-provider
</groupId>
-
<artifactId>00-api-provider
</artifactId>
-
<version>1.0-SNAPSHOT
</version>
-
-
<properties>
-
<project.build.sourceEncoding>UTF-8
</project.build.sourceEncoding>
-
<maven.compiler.source>1.8
</maven.compiler.source>
-
<maven.compiler.target>1.8
</maven.compiler.target>
-
<!-- 自定義版本號 -->
-
<spring-version>4.3.16.RELEASE
</spring-version>
-
</properties>
-
-
<dependencies>
-
<!--業務接口工程依賴-->
-
<dependency>
-
<groupId>00-api
</groupId>
-
<artifactId>00-api
</artifactId>
-
<version>1.0-SNAPSHOT
</version>
-
</dependency>
-
-
<!-- dubbo依賴 -->
-
<dependency>
-
<groupId>org.apache.dubbo
</groupId>
-
<artifactId>dubbo
</artifactId>
-
<version>2.7.2
</version>
-
</dependency>
-
-
<!-- Spring依賴 -->
-
<dependency>
-
<groupId>org.springframework
</groupId>
-
<artifactId>spring-beans
</artifactId>
-
<version>${spring-version}
</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework
</groupId>
-
<artifactId>spring-core
</artifactId>
-
<version>${spring-version}
</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework
</groupId>
-
<artifactId>spring-context
</artifactId>
-
<version>${spring-version}
</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework
</groupId>
-
<artifactId>spring-expression
</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-aspects
</artifactId>
-
<version>${spring-version}
</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework
</groupId>
-
<artifactId>spring-tx
</artifactId>
-
<version>${spring-version}
</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework
</groupId>
-
<artifactId>spring-jdbc
</artifactId>
-
<version>${spring-version}
</version>
-
</dependency>
-
<!-- commons-logging依賴 -->
-
<dependency>
-
<groupId>commons-logging
</groupId>
-
<artifactId>commons-logging
</artifactId>
-
<version>1.2
</version>
-
</dependency>
-
</dependencies>
-
-
-
</project>
(3) 定義接口實現類
(4) 定義spring-provider配置文件
在src/main/resources下定義spring-provider.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.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
-
-
<!--指定當前工程在管控平台中的名稱-->
-
<dubbo:application name="01-provider"/>
-
-
<!--指定注冊中心:不使用注冊中心-->
-
<dubbo:registry address="N/A"/>
-
-
<!--注冊業務接口實現類,它是真正的服務提供者-->
-
<bean id="someService" class="com.dubbo.provider.SomeServiceImpl"/>
-
-
<!--服務暴露-->
-
<dubbo:service interface="com.dubbo.provider.SomeService" ref="someService"/>
-
</beans>
(5) 定義測試類
在/src/test/java中創建測試類RunProvider
五、創建提供者(Main啟動) 01-api-provider
使用自建Spring容器方式是比較浪費資源的。容器的作用僅僅就是創建一個單例的提供者對象,其本身並不需要 Tomcat 或 JBoss 等 Web 容器的功能。如果硬要用 Web 容器去加載服務提供方,就增加了代碼的復雜性,也浪費了資源。
Dubbo提供了一個Main.main()方法可以直接創建並啟動Provider,其底層僅僅是加載了一個簡單的用於暴露服務的Spring容器。該方式要求Spring配置文件必須要放到類路徑下的META-INF/spring目錄中,Spring配置文件名稱無所謂
(1)工程創建
復制00-api-provider工程,並修改其工程名01-api-provider
(2) 創建目錄並移動配置文件
在resources目錄中創建META-INF/spring目錄,並將spring-provider.xml配置文件拖入其中
(3) 修改啟動類
六、創建消費者01-consumer
(1) 創建工程
創建一個Maven的Java工程,並命名為01-consumer
(2) 在pom中導入依賴
該工程的依賴與Provider中的完全相同,直接復制來就可以
(3) 定義spring-consumer配置文件
(4) 定義消費者類
七、效果
(1)啟動提供者
(2)消費者消費