基于Dubbo的动态远程调用_屌丝的程序员的博客-程序员信息网

技术标签: 动态调用  dubbo  

基于Dubbo的动态远程调用

问题:为解决实际业务,由我方提供接口定义,具体的实现交给第三方处理。然后由第三方将开发好的服务注册到他们自己的Dubbo服务上,由我方调用。问题就在于多个第三方开发具体实现,对于我方而言如果按照配置方式切入调用是无法满足这种需求。所以找寻了dubbo的根据URL远程调用服务的机制。以下是Demo

关于Zookeeper的安装&配置此次不详细介绍了。

服务调用方

定义服务接口:

[java]  view plain   copy
  1. package com.demo.service;  
  2.   
  3. /** 
  4.  * Desc: 
  5.  * Mail:[email protected] 
  6.  * author:Michael Zhao 
  7.  * Date:2015-03-04. 
  8.  */  
  9. public interface DemoService {  
  10.     public String deal(String someting);  
  11. }  

定义Consumer配置文件:

[html]  view plain   copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.         http://www.springframework.org/schema/beans/spring-beans.xsd  
  7.         http://code.alibabatech.com/schema/dubbo  
  8.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
  9.   
  10.     <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->  
  11.     <dubbo:application name="dubbo_consumer" />  
  12. </beans>  

远程调用测试类:

[java]  view plain   copy
  1. package com.demo.test;  
  2.   
  3. import com.alibaba.dubbo.config.spring.ReferenceBean;  
  4. import com.demo.service.DemoService;  
  5. import lombok.extern.slf4j.Slf4j;  
  6. import org.junit.Test;  
  7. import org.junit.runner.RunWith;  
  8. import org.springframework.beans.factory.annotation.Autowired;  
  9. import org.springframework.context.ApplicationContext;  
  10. import org.springframework.test.context.ContextConfiguration;  
  11. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
  12.   
  13. /** 
  14.  * Desc:测试Dubbo实时映射bean 
  15.  * Mail:[email protected] 
  16.  * author:Michael Zhao 
  17.  * Date:2015-03-04. 
  18.  */  
  19. @RunWith(SpringJUnit4ClassRunner.class)  
  20. @ContextConfiguration(locations = {  
  21.         "classpath:/spring/root-context.xml"  
  22. })  
  23. @Slf4j  
  24. public class RealReference {  
  25.     //用于将bean关系注入到当前的context中  
  26.     @Autowired  
  27.     private ApplicationContext applicationContext;  
  28.   
  29.     @Test  
  30.     public void realReference() {  
  31.         String url = "dubbo://localhost:21880/com.demo.service.DemoService";//更改不同的Dubbo服务暴露的ip地址&端口  
  32.   
  33.         ReferenceBean<DemoService> referenceBean = new ReferenceBean<DemoService>();  
  34.         referenceBean.setApplicationContext(applicationContext);  
  35.         referenceBean.setInterface(com.demo.service.DemoService.class);  
  36.         referenceBean.setUrl(url);  
  37.   
  38.         try {  
  39.             referenceBean.afterPropertiesSet();  
  40.             DemoService demoService = referenceBean.get();  
  41.             System.out.print(demoService.deal("Tester"));  
  42.         } catch (Exception e) {  
  43.             e.printStackTrace();  
  44.         }  
  45.     }  
  46. }  


服务提供方实现接口:

实现1:

[java]  view plain   copy
  1. package com.dubboT.service;  
  2.   
  3. import com.demo.service.DemoService;  
  4. import lombok.extern.slf4j.Slf4j;  
  5. import org.springframework.stereotype.Service;  
  6.   
  7. /** 
  8.  * Desc:Dubbo动态加载服务测试 
  9.  * Mail:[email protected] 
  10.  * author:Michael Zhao 
  11.  * Date:2015-03-04. 
  12.  */  
  13. @Service  
  14. @Slf4j  
  15. public class DemoServiceImpl implements DemoService {  
  16.     @Override  
  17.     public String deal(String s) {  
  18.         return "My Name is " + s;  
  19.     }  
  20. }  

实现2:

[java]  view plain   copy
  1. package com.dubboT.service;  
  2.   
  3. import com.demo.service.DemoService;  
  4.   
  5. /** 
  6.  * Desc: 
  7.  * Mail:[email protected] 
  8.  * author:Michael Zhao 
  9.  * Date:2015-03-05. 
  10.  */  
  11. public class DemoServiceNImpl implements DemoService {  
  12.     @Override  
  13.     public String deal(String s) {  
  14.         return "This is DemoServiceNImpl " + s;  
  15.     }  
  16. }  

分别在不同的端口暴露Service的实现

[html]  view plain   copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.         http://www.springframework.org/schema/beans/spring-beans.xsd    
  7.         http://code.alibabatech.com/schema/dubbo    
  8.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd    
  9.         ">  
  10.   
  11.     <bean id="demoService" class="com.rabbit.service.DemoServiceImpl" />  
  12.   
  13.     <!-- 提供方应用信息,用于计算依赖关系 -->  
  14.     <dubbo:application name="dubboProvider"  />  
  15.   
  16.     <!-- 使用zookeeper注册中心暴露服务地址 -->  
  17.     <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
  18.   
  19.     <!-- 用dubbo协议在20880端口暴露服务 -->  
  20.     <dubbo:protocol name="dubbo" port="20880" />  
  21.   
  22.     <!-- 声明需要暴露的服务接口 -->  
  23.     <dubbo:service interface="com.elasticsearch.service.DemoService" ref="demoService" />  
  24.   
  25. </beans>    

DemoServiceNImpl在21800端口暴露

[html]  view plain   copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.         http://www.springframework.org/schema/beans/spring-beans.xsd    
  7.         http://code.alibabatech.com/schema/dubbo    
  8.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd    
  9.         ">  
  10.   
  11.     <bean id="demoService" class="com.rabbit.service.DemoServiceNImpl" />  
  12.   
  13.     <!-- 提供方应用信息,用于计算依赖关系 -->  
  14.     <dubbo:application name="dubboProvider"  />  
  15.   
  16.     <!-- 使用zookeeper注册中心暴露服务地址 -->  
  17.     <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
  18.   
  19.     <dubbo:protocol name="dubbo" port="21880" />  
  20.   
  21.     <!-- 声明需要暴露的服务接口 -->  
  22.     <dubbo:service interface="com.elasticsearch.service.DemoService" ref="demoService" />  
  23.   
  24. </beans>    


分别提供服务

[java]  view plain   copy
  1. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  2.   
  3. /** 
  4.  * Desc: 
  5.  * Mail:[email protected] 
  6.  * author:Michael Zhao 
  7.  * Date:2015-03-04. 
  8.  */  
  9. public class DubboProviderMain {  
  10.     public static void main(String[] args) throws Exception {  
  11.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "spring/rabbit-dubbo-provider.xml"});  
  12.         context.start();  
  13.   
  14.         System.in.read();  
  15.     }  
  16. }  

[html]  view plain   copy
  1. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  2.   
  3. /**  
  4.  * Desc:  
  5.  * Mail:[email protected]  
  6.  * author:Michael Zhao  
  7.  * Date:2015-03-04.  
  8.  */  
  9. public class DubboProvider2Main {  
  10.     public static void main(String[] args) throws Exception {  
  11.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring/dubbo-provider.xml"});  
  12.         context.start();  
  13.   
  14.         System.in.read();  
  15.     }  
  16. }  
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ganjing222/article/details/76033830

智能推荐

最小二乘法 多项式拟合 C语言实现(引用)(附echarts画图代码)_最小二乘法 直线拟合 c语言_野人204666的博客-程序员信息网

C++多阶拟合(附echarts画图代码)细微修改,更通用细微修改,更通用原文章 https://blog.csdn.net/sunshineacm/article/details/79069561/* 本实验根据数组x[], y[]列出的一组数据,用最小二乘法求它的拟合曲线。 近似解析表达式为y = a0 + a1 * x + a2 * x^2 + a3 * x^3;(三阶)*/#include &lt;stdio.h&gt;#include &lt;math.h&gt;#

DropDownList 三级联动查询 简单用法_dropdownlist选中触发查询‘_RyoL的博客-程序员信息网

需要刷新页面的, 非无刷新联动.前台随便弄的:省:市:区:后台也随便弄的: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.

super( test, self).__init__()_super(test, self).__init__()_nasa110的博客-程序员信息网

python中的super( test, self).__init__()首先找到test的父类(比如是类A),然后把类test的对象self转换为类A的对象,然后“被转换”的类A对象调用自己的__init__函数

Kubernetes中的Volume介绍_dianfu2892的博客-程序员信息网

Kubernetes中支持的所有磁盘挂载卷简介发表于 2018年1月26日Weihai Feb 10,20167400 字 | 阅读需要 15 分钟容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像...

憨豆爱编程之python来整蛊_weixin_43421712的博客-程序员信息网

Python是时下特别流行的开发语言,没有接触过得朋友可能觉得很高深,其实她的语法特别简单易学, 下面给大家来一段简单的代码,看看她能做什么,大家可以拿来整蛊一下你身边的朋友.在快乐中学习编程知识. 我们要做的就是在一个设定的时间内锁定电脑的鼠标和键盘, 14行代码, 设定好启动时间和次数, 在你朋友离开的时候悄悄在她(他)电脑上运行, 到了设定的时间,她的电脑就会像中了邪一样不听使唤了...

A - Jungle Roads POJ - 1251( 最小生成树 kruskal )_九羽-的博客-程序员信息网

A - Jungle Roads POJ - 1251( 最小生成树 kruskal )The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some years ago. ...

随便推点

10分钟搞定linux编辑器vim的配置_linux vim配置_谁把钱丢了的博客-程序员信息网

前言Vim是linux操作系统的一款非常强大的编辑器,配置Vim就是要让其形成一个像VS一样的IDE集成环境。所以为了能在linux下实现高效编程和开发,Vim的配置是必须要完成的一项任务。然而,对linux初学者而言,这无非是一个难度不小的挑战。但几乎每个初学者接触linux时,都会被要求配置vim,在网上搜索“vim配置”就会出现很多文章:网上诸如此类的教程有很多,给出的效果图也很高大上(所有在

【鸿蒙】HarMonyOS的UI组件学习四之自定义选项卡_移动ui界面 界面中含有四个配参选项卡_笔触狂放的博客-程序员信息网

今天分享一个手机应用主界面的选项卡页面,可能很多朋友不理解什么叫选项卡界面,那么接下来举几个栗子:大家都熟悉QQ这个应用软件,那么整个软件其实就分为三大类,消息,联系人,动态,点击界面的最下面的三个进行切换不同的页面,那么这三个就称为选项卡,再比如微信:微信软件的主界面也是这种结构,只不过它下面是四个选项卡,微信,通讯录,发现,我,如果大家观察的比较仔细一点,有些软件也可能会出现五个选项卡,甚至有些软件的选项卡不在界面的底部,可能在界面的顶部。所有在手机和平板等移动设备中,这个选项卡的功能使用率非

python学习重点笔记——运算符_冻书的博客-程序员信息网

·赋值运算符①可进行连续赋值操作,例:a = b = c = 20②可进行加减等运算赋值,例:a = 20;b = a + 10·算术运算符乘法‘*’可与字符串进行连接,例:5 * ‘abc’,结果会输出5个abc 除法‘/’and‘//’两种,‘/’表示普通除法,与平常数学计算相同,除不尽会有小数部分;‘//’整除。(注意:不允许使用0作为除数) 求余‘%’,可以对浮点型数据...

【数据结构】栈和队列相关面试题_码农印象的博客-程序员信息网

栈和队列面试题(c语言实现) 1.实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值)的时间复杂度为O(1). 2.使用两个栈实现一个队列 3.使用两个队列实现一个栈 4.元素出栈、入栈的合法性。如入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1) 5.一个数组实现两个共享栈 1.实现一个栈,要求实现Push(入栈)...

使用 Tinymce 上传本地视频到七牛以及视频预览_tinymce七牛上传_MrQiuGH的博客-程序员信息网

官网后台又加一个新需求,那就接上一篇的接着说,在 Vue 中使用 Tinymce 富文本编辑器 + 上传图片到七牛确保引入了media插件import 'tinymce/plugins/media'在init数据源中添加media data() { return { mediaUploaded: false, //有没有上传完成 resVideo: '', //返回的视频url init: { .

推荐文章

热门文章

相关标签