Dubbo整合Spring Boot(採用註解API方式配置)

該種方式和上一篇:https://blog.csdn.net/u014429653/article/details/99703451創建過程基本一樣,不同處是配置文件
參考官方文檔API配置和註解配置將xml裏面的東西編寫爲API代碼再使用註解註冊到容器中。
API配置: http://dubbo.apache.org/zh-cn/docs/user/configuration/api.html
xml配置: http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html

1、創建工程

創建一個空的maven父工程:,在父工程下創建一個maven子工程,然後創建兩個springboot工程;
父工程:dubbospringbootdemo2
maven子工程:dubbospringbootapi(公共api接口)
springboot工程:dubbospringbootprovider(服務提供方)
springboot工程:dubbospringbootconsumer(服務消費方)
在這裏插入圖片描述

2、配置過程

2.1 在dubbospringbootapi工程中加入接口

在這裏插入圖片描述

2.2 配置dubbospringbootprovider

在pom.xml中引入jar包
在這裏插入圖片描述
創建接口實現類(service註解暴露服務):
**注意:**此處必須要用@Component註解
在這裏插入圖片描述
創建dubbo配置類(提供方全局配置):
在這裏插入圖片描述

package com.dubboo.test.dubbospringbootprovider.configuration;


import com.alibaba.dubbo.config.*;
import com.dubbo.test.service.DemoService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

@Configuration
public class MyDubboConfig {

    //<dubbo:application name="boot-user-service-provider"></dubbo:application>
    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("user-service-provider-2");
        return applicationConfig;
    }

    //<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setProtocol("zookeeper");
        registryConfig.setAddress("127.0.0.1:2181");
        return registryConfig;
    }

    //<dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
    @Bean
    public ProtocolConfig protocolConfig() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setName("dubbo");
        protocolConfig.setPort(20882);
        return protocolConfig;
    }


    /**
     *<dubbo:service interface="com.zang.gmall.service.UserService"
     ref="userServiceImpl01" timeout="1000" version="1.0.0">
     <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
     </dubbo:service>
     */
    @Bean
    public ServiceConfig<DemoService> userServiceConfig(DemoService demoService) {
        ServiceConfig<DemoService> serviceConfig = new ServiceConfig<>();
        serviceConfig.setInterface(DemoService.class);
        serviceConfig.setRef(demoService);
        serviceConfig.setVersion("1.0.0");

        //配置每一個method的信息
        MethodConfig methodConfig = new MethodConfig();
        methodConfig.setName("sayHello");
        methodConfig.setTimeout(1000);

        //將method的設置關聯到service配置中
        List<MethodConfig> methods = new ArrayList<>();
        methods.add(methodConfig);
        serviceConfig.setMethods(methods);

        return serviceConfig;
    }

    //	<dubbo:provider timeout="1000"></dubbo:provider>
    @Bean
    public ProviderConfig providerConfig() {
        ProviderConfig providerConfig = new ProviderConfig();
        providerConfig.setTimeout(5000);
        return providerConfig;
    }


    //	<dubbo:monitor address="127.0.0.1:7010"></dubbo:monitor>
    @Bean
    public MonitorConfig monitorConfig() {
        MonitorConfig monitorConfig = new MonitorConfig();
        //monitorConfig.setAddress("127.0.0.1:7010");
        monitorConfig.setProtocol("registry");
        return monitorConfig;
    }

}

Spring Boot啓動類添加服務掃描:
@DubboComponentScan(basePackages = “com.dubboo.test.dubbospringbootprovider”)
在這裏插入圖片描述

2.3 配置dubbospringbootconsumer

在pom.xml中引入jar包(同2.2provider引入相同)
創建接口和實現類,在實現類中使用@Reference引入遠程服務
在這裏插入圖片描述
創建controller
在這裏插入圖片描述
創建dubbo配置類(提供方全局配置):
在這裏插入圖片描述

package com.dubbo.test.dubbospringbootconsumer.configuration;


import com.alibaba.dubbo.config.*;
import com.dubbo.test.service.DemoService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

@Configuration
public class MyDubboConfig {

    //<dubbo:application name="boot-user-service-provider"></dubbo:application>
    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("user-service-sonsumer-2");
        return applicationConfig;
    }

    //<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setProtocol("zookeeper");
        registryConfig.setAddress("127.0.0.1:2181");
        return registryConfig;
    }

    //<dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
    @Bean
    public ProtocolConfig protocolConfig() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setName("dubbo");
        protocolConfig.setPort(20883);
        return protocolConfig;
    }


    /**
     *<dubbo:service interface="com.zang.gmall.service.UserService"
     ref="userServiceImpl01" timeout="1000" version="1.0.0">
     <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
     </dubbo:service>
     */
    @Bean
    public ReferenceConfig<DemoService> userReferenceConfig() {
        ReferenceConfig<DemoService> serviceConfig = new ReferenceConfig<>();
        serviceConfig.setInterface(DemoService.class);
        serviceConfig.setTimeout(5000);
        serviceConfig.setVersion("*");
        serviceConfig.setRetries(3);


        //配置每一個method的信息
        MethodConfig methodConfig = new MethodConfig();
        methodConfig.setName("sayHello");
        methodConfig.setTimeout(1000);

        //將method的設置關聯到service配置中
        List<MethodConfig> methods = new ArrayList<>();
        methods.add(methodConfig);
        serviceConfig.setMethods(methods);

        return serviceConfig;
    }

    //	<dubbo:consumer check="false" timeout="5000"></dubbo:consumer>
    @Bean
    public ConsumerConfig consumerConfig() {
        ConsumerConfig consumerConfig = new ConsumerConfig();
        consumerConfig.setTimeout(3000);
        return consumerConfig;
    }


    //	<dubbo:monitor address="127.0.0.1:7010"></dubbo:monitor>
    @Bean
    public MonitorConfig monitorConfig() {
        MonitorConfig monitorConfig = new MonitorConfig();
        //monitorConfig.setAddress("127.0.0.1:7010");
        monitorConfig.setProtocol("registry");
        return monitorConfig;
    }

}

此處注意的是:爲避免和dubbospringbootprovider工程使用相同的端口,這裏在application.properties中自由配置端口;
同理:在dubbospringbootprovider也可以在application.properties中自由設置端口;
在這裏插入圖片描述

3、運行過程

啓動服務方和消費方;
在這裏插入圖片描述
在這裏插入圖片描述
同時去管理平臺dubbo-admin和監控平臺dubbo-monitor查看
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章