SpringBoot系列之集成Dubbo的方式
2011 年 6 月 1 日
SpringBoot系列之集成Dubbo的方式
本博客介绍Springboot框架集成Dubbo实现微服务的3种常用方式,对于Dubbo知识不是很熟悉的,请先学习我上一篇博客: SpringBoot系列之集成Dubbo实现微服务教程
,本博客只是对上篇博客的补充,上篇博客已经介绍过的就不重复介绍
还是使用上篇博客的例子,业务场景:
某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址;
我们现在 需要创建两个服务模块进行测试
模块 | 功能 |
---|---|
订单服务模块 | 创建订单等 |
用户服务模块 | 查询用户地址等 |
-
测试预期结果:
订单服务web模块在A服务器,用户服务模块在B服务器,A可以远程调用B的功能
例子具体细节,请参考 SpringBoot系列之集成Dubbo实现微服务教程
,然后所谓的方式不同,其实主要就是对于配置文件使用的不同,按照这种差异,进行分类描述:
-
application.properties方式
这种方式,同样需要导入dubbo-starter,然后配置application即可
比如我的服务端配置:
#server.port=7010 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=20882 dubbo.monitor.protocol=registry #dubbo.scan.base-packages=com.example.springboot.dubbo
然后对于暴露服务和引用服务,还是使用@Service【暴露服务】使用@Reference【引用服务】
-
xml配置文件方式
在Springboot官方建议的还是使用application或者其它方式,不过只是建议,Springboot还是可以支持xml的
以服务提供者配置为例,新建一个provider.xml的配置文件
<!-- -->
然后在application类或者其它自定义配置类里引用 @ImportResource(locations="classpath:provider.xml")
对于xml方式进行使用的,可以参考我之前博客: Dubbo系列之服务注册与发现
-
全注解API的方式
接着介绍全注解方式来实现,也即不使用application进行配置,也不使用xml配置文件,然后一些自定义配置总是要,那要怎么实现?这里可以通过写一个Config类来实现
package com.example.springboot.dubbo.service.impl; import org.apache.dubbo.config.*; import com.example.spring.dubbo.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 { @Bean public ApplicationConfig applicationConfig() { ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName("user-service-provider"); return applicationConfig; } // @Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setProtocol("zookeeper"); registryConfig.setAddress("127.0.0.1:2181"); return registryConfig; } // @Bean public ProtocolConfig protocolConfig() { ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setName("dubbo"); protocolConfig.setPort(20882); return protocolConfig; } /** * */ @Bean public ServiceConfig userServiceConfig(UserService userService){ ServiceConfig 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 methods = new ArrayList(); methods.add(methodConfig); serviceConfig.setMethods(methods); return serviceConfig; } /** * */ @Bean public ProviderConfig providerConfig(){ ProviderConfig providerConfig = new ProviderConfig(); providerConfig.setTimeout(1000); return providerConfig; } /** * */ @Bean public MonitorConfig monitorConfig(){ MonitorConfig monitorConfig = new MonitorConfig(); monitorConfig.setProtocol("registry"); return monitorConfig; } }
每一个组件手动创建到容器中,让dubbo来扫描其他的组件