前面介绍了,springboot+dubbo基础整合,这篇介绍多端口注入服务。

  springboot使用@Bean注入dubbo服务,当你是单一的ProviderConfig实例,dubbo的@Service会自动索引到你注入的实例。但实际使用情况下,dubbo服务提供者不可能统统只用一个端口提供服务。

  这是你就需要注入多个ProviderConfig,ProtocolConfig实例, 因此你可以封装自己的dubboConfiguration,注入新的ProviderConfig,ProtocolConfig实例。

  1. package hello.configuration;
  2.  
  3. import javax.annotation.Resource;
  4.  
  5. import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8.  
  9. import com.alibaba.dubbo.config.ApplicationConfig;
  10. import com.alibaba.dubbo.config.ProtocolConfig;
  11. import com.alibaba.dubbo.config.ProviderConfig;
  12. import com.alibaba.dubbo.config.RegistryConfig;
  13. import com.alibaba.dubbo.rpc.Exporter;
  14.  
  15. /**
  16. * 多端口提供dubbo服务
  17. * 当你使用多端口提供服务,使用默认端口提供服务:需要加入在service上加上defaultProvider
  18. * @author chenlili
  19. *
  20. */
  21. @Configuration
  22. @ConditionalOnClass(Exporter.class)
  23. public class DubboAutoConfiguration {
  24.  
  25. @Resource(name="protocolConfig1")
  26. private ProtocolConfig protocolConfig;
  27.  
  28. @Resource(name="protocolConfig2")
  29. private ProtocolConfig protocolConfig2;
  30.  
  31. /**
  32. * 默认基于dubbo协议提供服务
  33. *
  34. * @return
  35. */
  36. @Bean(name = "protocolConfig1")
  37. public ProtocolConfig protocolConfig() {
  38. // 服务提供者协议配置
  39. ProtocolConfig protocolConfig = new ProtocolConfig();
  40. protocolConfig.setName("rmi");
  41. protocolConfig.setPort(20881);
  42. protocolConfig.setThreads(200);
  43.  
  44. System.out.println("protocolConfig1的hashCode: " + protocolConfig.hashCode());
  45.  
  46. return protocolConfig;
  47. }
  48.  
  49. /**
  50. * dubbo服务提供
  51. *
  52. * @param applicationConfig
  53. * @param registryConfig
  54. * @param protocolConfig
  55. * @return
  56. */
  57. @Bean(name = "providerConfig1")
  58. public ProviderConfig providerConfig(ApplicationConfig applicationConfig, RegistryConfig registryConfig) {
  59. ProviderConfig providerConfig = new ProviderConfig();
  60. providerConfig.setTimeout(1000);
  61. providerConfig.setRetries(1);
  62. providerConfig.setDelay(-1);
  63. providerConfig.setApplication(applicationConfig);
  64. providerConfig.setRegistry(registryConfig);
  65. providerConfig.setProtocol(this.protocolConfig);
  66. return providerConfig;
  67. }
  68.  
  69. /**
  70. * 默认基于dubbo协议提供服务
  71. *
  72. * @return
  73. */
  74. @Bean(name = "protocolConfig2")
  75. public ProtocolConfig protocolConfig2() {
  76. // 服务提供者协议配置
  77. ProtocolConfig protocolConfig = new ProtocolConfig();
  78. protocolConfig.setName("dubbo");
  79. protocolConfig.setPort(20882);
  80. protocolConfig.setThreads(200);
  81.  
  82. System.out.println("protocolConfig2的hashCode: " + protocolConfig.hashCode());
  83.  
  84. return protocolConfig;
  85. }
  86.  
  87. /**
  88. * dubbo服务提供
  89. *
  90. * @param applicationConfig
  91. * @param registryConfig
  92. * @param protocolConfig
  93. * @return
  94. */
  95. @Bean(name = "providerConfig2")
  96. public ProviderConfig providerConfig2(ApplicationConfig applicationConfig, RegistryConfig registryConfig) {
  97. ProviderConfig providerConfig = new ProviderConfig();
  98. providerConfig.setTimeout(1000);
  99. providerConfig.setRetries(1);
  100. providerConfig.setDelay(-1);
  101. providerConfig.setApplication(applicationConfig);
  102. providerConfig.setRegistry(registryConfig);
  103. providerConfig.setProtocol(protocolConfig2);
  104. return providerConfig;
  105. }
  106. }

  @Service使用时,直接使用@Service(version="1.0.0")会报错,提示你找不到对应的provider,因此需要配上对应的provider,因此在默认dubboConfiguration上加了@Bean(name="defaultProvider"),用于索引默认provider。

  

  1. package hello.dubbo;
  2.  
  3. import com.alibaba.dubbo.config.annotation.Service;
  4. import com.jon.show.service.IDubboDemoService;
  5.  
  6. @Service(version="1.0.0",provider="providerConfig1")
  7. public class DubboDemoServiceImpl implements IDubboDemoService{
  8.  
  9. @Override
  10. public String sayHello(String name) {
  11. return "hello " + name;
  12. }
  13.  
  14. @Override
  15. public String sayYourAge(int age) {
  16. return null;
  17. }
  18.  
  19. }
  1. package hello.dubbo;
  2.  
  3. import com.alibaba.dubbo.config.annotation.Service;
  4. import com.google.gson.Gson;
  5. import com.jon.show.model.Person;
  6. import com.jon.show.service.IDubboPersonService;
  7.  
  8. @Service(version="1.0.0", provider="providerConfig2")
  9. public class PersonServiceImpl implements IDubboPersonService{
  10.  
  11. @Override
  12. public String toJson(Person person) {
  13. Gson gson = new Gson();
  14. return gson.toJson(person);
  15. }
  16.  
  17. }

  启动appliction类,dubbo服务就能提供多端口支持了!!

  PS:dubbo服务的所需实例均交由spring管理。

springboot+dubbo之多端口注入服务的更多相关文章

  1. SpringBoot + Dubbo + zookeeper 搭建简单分布式服务

    SpringBoot + Dubbo + zookeeper 搭建简单分布式服务 详细操作及源码见: https://github.com/BillyYangOne/dubbo-springboot

  2. 使用 SpringBoot+Dubbo 搭建一个简单分布式服务

    实战之前,先来看几个重要的概念 开始实战之前,我们先来简单的了解一下这样几个概念:Dubbo.RPC.分布式.由于本文的目的是带大家使用SpringBoot+Dubbo 搭建一个简单的分布式服务,所以 ...

  3. springboot dubbo filter之依赖注入null

    @Autowiredprivate ICallerRepository callerRepository;...用dubbo提供的ServiceBean即可获取bean,因为该类已经实现了Applic ...

  4. 超详细,新手都能看懂 !使用SpringBoot+Dubbo 搭建一个简单的分布式服务

    来自:JavaGuide Github 地址:https://github.com/Snailclimb/springboot-integration-examples 目录: 使用 SpringBo ...

  5. 十分钟搭建微服务框架(SpringBoot +Dubbo+Docker+Jenkins源码)

    本文将以原理+实战的方式,首先对“微服务”相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 这套微服务框架能干啥? 这套系统搭建完之后,那可就厉害了: 微服务架构 你的整个应用程 ...

  6. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...

  7. springboot+dubbo+zookeeper微服务实践demo

    微服务化越来越火,实际上是应互联网时代而生的,微服务化带来的不仅是性能上的提升,更带来了研发组织的更加便利,协作更加轻松,团队效能更高. 当然不能为了技术而技术,我们需要切合实际的对业务进行划分,降低 ...

  8. 搭建SpringBoot+dubbo+zookeeper+maven框架(一)

    这几天项目还没来,所以就自己试着参考网上的一些资料,搭建了一个SpringBoot+dubbo+zookeeper+maven框架,网上参考的很多资料照着他们一步一步搭建,最后很多都运行不通,很是郁闷 ...

  9. springboot+dubbo+zookeeper+mybatis

    参考地址:https://www.cnblogs.com/gaopengfirst/p/9555240.html 首先创建一个maven项目: 再在该父项目中创建3个module,分别是:provid ...

随机推荐

  1. web在线打印,打印阅览,打印维护,打印设计

    winform打印的方案比较多,实现也比较容易,而且效果也非常炫:但现在越来越多的系统是web系统,甚至是移动端.网上也有非常的web打印方案,但各式各样的问题非常多,比如js兼容性,稳定性等一直缠绕 ...

  2. iOS开发

    #import 预处理指令,相对于 #include 而言,能防止重复拷贝,它可以导入OC头文件,也可以导入C头文件. OC中在一个框架中,有一个主头文件(该头文件名称一般跟框架名称相同),该主头文件 ...

  3. NOSDK--一键打包的实现(一)

    所谓一键打包,包含五个流程: 刷新mk,这个只有在文件数目改变的时候才会需要: 编译,在实现了统一接入以后,只需要编译一次就可以打多个包,这个以后再介绍: 拷贝资源,这个使用的是cocos2d-x自带 ...

  4. 手动封装js原生XMLHttprequest异步请求

    Code Object.extend =function(targetObj,fnJson){ //扩展方法,类似于jQuery的$.extend,可以扩展类的方法,也可以合并对象 for(var f ...

  5. UVA-11997 K Smallest Sums

    UVA - 11997 K Smallest Sums Time Limit: 1000MS   Memory Limit: Unknown   64bit IO Format: %lld & ...

  6. Windows 7安装解压版MySQL 5.6(不包含配置文件优化)

    到官网下载MySQL5.6 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html, 提供了 .exe版本 和 .zip解压版,因为我的操作系统是64位的 ...

  7. October 23rd Week 44th Sunday 2016

    When ambition ends, happiness begins. 野心消亡之日,正是快乐破茧之时. No ambition, no annoyance. No ambition, no ac ...

  8. Jquery表单提交后获取返回Json值

    1.给form添加id值: <form action="/News/SaveMessage" method="post" accept-charset=& ...

  9. angularjs---select使用---默认值及联动

    angularjs---select使用---默认值及联动   代码 一. select设置默认显示内容&&获取下拉框显示内容. HTML <div> <select ...

  10. 如何让页眉随章节的不同而变化(Word 2010)

    在一般情况下,我们将页眉设置完成后,所有章节的页眉都是一样的. 但在某些时候,我们需要让不同的章节拥有各自不同的页眉.那么该如何设置呢? 1. 我们以下图的文件为例,该文件一共包括4个实验,暂未设置页 ...