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查看
在这里插入图片描述
在这里插入图片描述

发布了23 篇原创文章 · 获赞 2 · 访问量 7037

猜你喜欢

转载自blog.csdn.net/u014429653/article/details/99705168