Dubbo:整合SpringBoot的三种方式

1

导入dubbo-starter,在application.properties配置属性,使用@Service 暴露服务,使用@Reference 引用服务

一定要在启动文件中加入@EnableDubbo 启动dubbo的包扫描

1、引入spring-boot-starter以及dubbo和curator的依赖
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
2、配置application.properties

示例:

dubbo.application.name=gmall-user
dubbo.registry.protocol=zookeeper
dubbo.registry.address=192.168.67.159:2181
dubbo.scan.base-package=com.atguigu.gmall
dubbo.protocol.name=dubbo
application.name就是服务名,不能跟别的dubbo提供端重复
registry.protocol 是指定注册中心协议
registry.address 是注册中心的地址加端口号
protocol.name 是分布式固定是dubbo,不要改。
base-package 注解方式要扫描的包

使用注解:

1.dubbo提供的@Service   相当于

<!-- 指定需要暴露的服务 -->
<dubbo:service interface="com.tinstu.gmall.service.UserService" ref="userServiceImpl" />

 

2.dubbo提供的@Reference   (不使用@Autowired)   相当于

<!--声明需要调用的远程服务的接口;生成远程服务代理-->
<dubbo:reference interface="com.tinstu.gmall.service.UserService" id="userService"></dubbo:reference>

【如果没有在配置中写dubbo.scan.base-package,还需要使用@EnableDubbo注解

2

导入dubbo-starter,保留dubbo的的xml配置文件,在springboot的启动文件中引@ImportResource(locations="classpath:provider.xml")

然后再dubbo的xml配置文件中进行相关的配置!

3

使用注解API的方式:

将每一个组件手动创建到容器中,如提供者的MyDubboConfig.java

package com.tinstu.gmall.bootserviceprovider.config;

import com.alibaba.dubbo.config.*;
import com.tinstu.gmall.service.UserService;
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="user-service-provider"></dubbo:application>
    @Bean
    public ApplicationConfig applicationConfig(){
        ApplicationConfig application = new ApplicationConfig();
        application.setName("user-service-provider");
        return application;
    }
    //  <!--指定注册中心的地址  -->
    //  <dubbo:registry address="zookeeper://120.48.39.100:2181" />
    @Bean
    public RegistryConfig registryConfig(){
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setProtocol("zookeeper"); // 多个协议可以用setProtocols()
        registryConfig.setAddress("120.48.39.100:2181");
        return registryConfig;
    }
   //  <!--使用dubbo协议,将服务暴露在20880端口  -->
   //  <dubbo:protocol name="dubbo" port="20880" />
    @Bean
    public ProtocolConfig protocolConfig(){
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setName("dubbo");
        protocolConfig.setPort(20882);
        return protocolConfig;
    }
  //  <!-- 指定需要暴露的服务 -->
  //  <dubbo:service interface="com.tinstu.gmall.service.UserService" ref="userServiceImpl" />
    @Bean
    public ServiceConfig<UserService> userServiceServiceConfig(UserService userService){
        ServiceConfig<UserService> serviceConfig = new ServiceConfig<>();
        serviceConfig.setInterface(UserService.class);
        serviceConfig.setRef(userService);
        serviceConfig.setValidation("1.0.0");
        //配置每一个method的信息
        MethodConfig methodConfig = new MethodConfig();
        methodConfig.setName("getUserAddressList");
        methodConfig.setTimeout(1000);
        //将method的设置关联到service配置中
        List<MethodConfig> methods = new ArrayList<>();
        methods.add(methodConfig);
        serviceConfig.setMethods(methods);

        return serviceConfig;
    }


}

 

 

阅读剩余
THE END