Spring boot配置Dubbo三种方式

时间:2023-03-09 20:17:57
Spring boot配置Dubbo三种方式

方式一

使用注解的方式

导入dubbo-starter 
在application.properties配置属性

使用@Service暴露服务 
使用@Reference引用服务

使用@EnableDubbo开启注解Dubbo功能 
或者配置包扫描

dubbo.scan.base-packages=com.atguigu.gmall

开启注解、包扫描,配置一个即可

这种方式 
可以在@Service、@Reference注解中配置属性 
属于类的配置,无法精确到方法的配置

方式二

使用dubbo的xml配置文件

导入dubbo-starter 
使用@ImportResource导入dubbo的配置文件即可

@ImportResource(locations="classpath:provider.xml")

dubbo的配置文件,之前怎么写 
现在还是怎么写,没有特殊要求

这种方式 
可以做到方法的精确配置

方式三

使用注解API的方式

将每一个组件手动创建到容器中 
让dubbo来扫描其他的组件

参考文档 
http://dubbo.apache.org/zh-cn/docs/user/configuration/annotation.html

Spring boot配置Dubbo三种方式

package com.atguigu.gmall.config;

import java.util.ArrayList;
import java.util.List; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.MethodConfig;
import com.alibaba.dubbo.config.MonitorConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.ProviderConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
import com.atguigu.gmall.service.UserService; @Configuration
public class MyDubboConfig { //<dubbo:application name="boot-user-service-provider"></dubbo:application>
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("boot-user-service-provider");
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.atguigu.gmall.service.UserService"
ref="userServiceImpl01" timeout="1000" version="1.0.0">
<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:service>
*/
@Bean
public ServiceConfig<UserService> userServiceConfig(UserService userService){
ServiceConfig<UserService> serviceConfig = new ServiceConfig<>();
serviceConfig.setInterface(UserService.class);
serviceConfig.setRef(userService);
serviceConfig.setVersion("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); //ProviderConfig
//MonitorConfig return serviceConfig;
} }

配置包扫描路径

可以,使用@DubboComponentScan注解 
也可以,使用@EnableDubbo注解

@EnableDubbo注解 
其实,里面配置的就是@DubboComponentScan注解

Spring boot配置Dubbo三种方式

扫描包路径:

@EnableDubbo(scanBasePackages="com.atguigu.gmall")

或者

@DubboComponentScan(basePackages ="com.atguigu.gmall")

生产者、消费者 
使用@Service、@Reference注解配置