Dubbo 改造普通單體項目

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發佈服務 idclook.net

 

從Dubbo 服務監控中能夠看見服務發佈成功ide

經過Dubbo發佈服務 www.idclook.net

 

二、改造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

相關文章
相關標籤/搜索