1. 程式人生 > 其它 >Dubbo建立提供者、消費者專案(dubbo怎麼使用)

Dubbo建立提供者、消費者專案(dubbo怎麼使用)

需要先開啟zookeeper和dubbo

Dubbo環境搭建

spring版本

Dubbo服務提供消費者介面搭建

建立Maven專案=> gmail-interface 用於存放共同的服務介面(存放實體bean和介面interface

建立Maven專案=>user-service-provider服務提供者(提供介面實現類)介面的實現類impl)

建立Maven專案=>order-service-consumer服務消費者(使用到提供者的介面的實現類)介面的實現類impl

介面專案中有自己的引用格式(pom.xml)(可以在其他maven專案中使用介面)(用於在消費者

提供者引用)

<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>

在消費者和提供者 pom.xml 中引用dubbo,介面專案,zookeeper客戶端(也可使用其他的註冊中心,可在dubbo官網查詢)

    <!-- 引入介面專案的介面 -->
    <dependency>
        <groupId>com.atguigu.gmall</groupId>
        <artifactId>gmall-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.2</version> </dependency> <!-- 註冊中心使用的是zookeeper,引入操作zookeeper的客戶端 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency>
View Code

在消費者(consumer.xml)和提供者(provider.xml)的resources下分別建立兩個xml(使用的是spring配置方式配置dubbo和zookeeper)(xml名字隨便取,之後使其ioc生效修改名字就行)

<?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">

    <!-- 1、指定當前服務/應用的名字(同樣的服務名字相同,不要和別的服務同名) -->
    <dubbo:application name="user-service-provider"></dubbo:application>
    
    <!-- 2、指定註冊中心的位置 -->
    <!-- <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
    
    <!-- 3、指定通訊規則(通訊協議?通訊埠) -->
    <dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
    
    <!-- 4、暴露服務   ref:指向服務的真正的實現物件 -->
    <dubbo:service interface="com.atguigu.gmall.service.UserService" 
        ref="userServiceImpl01" timeout="1000" version="1.0.0">
        <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
    </dubbo:service>
    
    <!--統一設定服務提供方的規則  -->
    <dubbo:provider timeout="1000"></dubbo:provider>
    
    
    <!-- 服務的實現 -->
    <bean id="userServiceImpl01" class="com.atguigu.gmall.service.impl.UserServiceImpl"></bean>
    
    
    <dubbo:service interface="com.atguigu.gmall.service.UserService" 
        ref="userServiceImpl02" timeout="1000" version="2.0.0">
        <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
    </dubbo:service>
    <bean id="userServiceImpl02" class="com.atguigu.gmall.service.impl.UserServiceImpl2"></bean>
    
    <!-- 連線監控中心 -->
    <dubbo:monitor protocol="registry"></dubbo:monitor>
    
</beans>
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"
    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.atguigu.gmall.service.impl"></context:component-scan>


    <dubbo:application name="order-service-consumer"></dubbo:application>
    
    <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
    
    <!--  配置本地存根-->
    
    <!--宣告需要呼叫的遠端服務的介面;生成遠端服務代理  -->
    <!-- 
        1)、精確優先 (方法級優先,介面級次之,全域性配置再次之)
        2)、消費者設定優先(如果級別一樣,則消費方優先,提供方次之)
    -->
    <!-- timeout="0" 預設是1000ms-->
    <!-- retries="":重試次數,不包含第一次呼叫,0代表不重試-->
    <!-- 冪等(設定重試次數)【查詢、刪除、修改】、非冪等(不能設定重試次數)【新增】 -->
    <dubbo:reference interface="com.atguigu.gmall.service.UserService" 
        id="userService" timeout="5000" retries="3" version="*">
        <!-- <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method> -->
    </dubbo:reference>
        
    <!-- 配置當前消費者的統一規則:所有的服務都不檢查 -->
    <dubbo:consumer check="false" timeout="5000"></dubbo:consumer>

    <dubbo:monitor protocol="registry"></dubbo:monitor>
    <!-- <dubbo:monitor address="127.0.0.1:7070"></dubbo:monitor> -->
    
</beans>
consumer.xml

啟動檢查

springboot版本

匯入依賴(介面依賴,dubbo-spring-boot-starter依賴)(包含了dubbo,zookeeper)

        <dependency>
            <groupId>com.atguigu.gmall</groupId>
            <artifactId>gmall-interface</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

在application.properties中配置dubbo

dubbo.application.name=user-service-provider
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper

dubbo.protocol.name=dubbo
dubbo.protocol.port=20881

dubbo.monitor.protocol=registry
dubbo.scan.base-packages=com.atguigu.gmall
View Code

提供者:

在springboot的主執行方法下開啟dubbo的註解功能(@EnableDubbo

將提供者的 spring包下的註解@service換為@Component

並使用dubbo包下註解@service(將介面暴露到dubbo中,能給其他應用提供介面)

這樣就不需要大量的在springboot中配置了

消費者

開啟springboot主執行方法中的dubbo註解(@EnableDubbo)

在dubbo中遠端引用其他應用的介面

將@Autowired改為@Reference

application.xml(因為監控中心使用的是8080埠,所以應用我們使用8081埠)

server.port=8081

dubbo.application.name=boot-order-service-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.monitor.protocol=registry
View Code