1、新建普通maven項目
一、首先,新建3個普通maven商城項目,模擬以往常見的Java單體應用開發,mall-interface是存放接口和公共代碼部分,order-service-consumer和user-service-provider的pom依賴於mall-interface。spring
二、在order-service-consumer和user-service-provider中分別實現接口,編寫各自的實現類apache
以往,若是order-service-consumer和user-service-provider有相互調用,通常須要看成一個模塊引用,部署到服務器的時候須要部署所有模塊,分佈部署多個服務器的話就很麻煩,而且大的項目模塊多的放在一塊兒不方便開發和管理。服務器
那麼,把項目中各個模塊分開部署那不就行了?可是若是直接把order-service-consumer 和user-service-provider分開部署不一樣服務器上,顯然他們不能相互調用業務接口。這時Dubbo做爲RPC框架,它的用處顯現出來了。簡單的說,Dubbo能夠遠程調用部署在不一樣服務器上的業務接口。app
經過Dubbo改造,即便order-service-consumer 和user-service-provider部署不一樣機器,兩個模塊能夠像調用本地接口同樣調用遠程服務。框架
2、經過Dubbo改造普通項目
一、改造user-service-provider項目,經過Dubbo發佈服務
1.1 在pom.xml中引入Duoob依賴
<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.xg.xmall.dubbo</groupId> <artifactId>user-service-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.xg.xmall</groupId> <artifactId>mall-interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- 引入dubbo --> <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.5</version> </dependency> <!-- 註冊中心使用的是zookeeper,引入操做zookeeper的客戶端端 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
2.2 在資源文件夾新建Dubbo配置文件 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://code.alibabatech.com/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 http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 一、指定當前服務/應用的名字(一樣的服務名字相同,不要和別的服務同名) --> <dubbo:application name="user-service-provider"></dubbo:application> <!-- 二、指定註冊中心的位置 --> <!-- <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> --> <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry> <!-- 三、指定通訊規則(通訊協議?通訊端口) --> <dubbo:protocol name="dubbo" port="20882"></dubbo:protocol> <!-- 四、暴露服務 ref:指向服務的真正的實現對象 --> <dubbo:service interface="com.xg.xmall.dubbo.service.UserService" ref="userServiceImpl" timeout="1000" version="1.0.0"> <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method> </dubbo:service> <!-- 服務的實現 --> <bean id="userServiceImpl" class="com.xg.xmall.dubbo.service.impl.UserServiceImpl"></bean> </beans>
2.3 編寫Dubbo服務啓動類 MainProviderApplication,啓動服務發佈註冊服務
發佈服務以前須要啓動 Zookeepermaven
從Dubbo 服務監控中能夠看見服務發佈成功ide
二、改造order-service-consumer項目,經過Dubbo訪問服務
1.1 一樣在項目下的pom.xml中引入Duoob依賴
<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.xg.xmall.dubbo</groupId> <artifactId>user-service-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.xg.xmall</groupId> <artifactId>mall-interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- 引入dubbo --> <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.5</version> </dependency> <!-- 註冊中心使用的是zookeeper,引入操做zookeeper的客戶端端 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
2.2 在資源文件夾新建Dubbo配置文件 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://dubbo.apache.org/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 掃描組件 --> <context:component-scan base-package="com.xg.xmall.dubbo.service.impl"></context:component-scan> <dubbo:application name="order-service-consumer"></dubbo:application> <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> <!--聲明須要調用的遠程服務的接口,生成遠程服務代理 --> <dubbo:reference interface="com.xg.xmall.dubbo.service.UserService" id="userService" timeout="5000" retries="3" version="*"> </dubbo:reference> <dubbo:monitor protocol="registry"></dubbo:monitor> </beans>
2.3 編寫Dubbo服務啓動類 MainConsumerApplication,啓動獲取服務
order-service-consumer並無存放用戶信息實現類,只是注入服務的接口,就能夠獲取其餘項目提供的用戶信息。可見,經過Dubbo調用遠程服務成功ui