Dubbo常用配置及源码解析-多版本支持

1、多版本的支持

如何发布服务,需要将需要暴露的服务接口发布出去供客户端调用,需要在java同级目录新建一个resources目录,然后将resoureces目录标记成Test Resoureces Root,然后在esources目录下新建MATE-INF.spring目录,在该目录下添加配置文件dubbo-server.xml文件

dubbo的服务端配置文件如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--提供方信息,用于计算依赖关系-->
<dubbo:application name="dubbo-server" owner="mic"/>

<!--注册中心 暴露服务地址-->
<dubbo:registry address="zookeeper://192.168.126.129:2181"/>

<!--用dubbo协议在20880 端口暴露服务-->
<dubbo:protocol port="20880" name="dubbo"/>

<!--声明需要暴露的服务接口,指定协议为dubbo,设置版本号1.1.1-->
<dubbo:service interface="com.gupaoedu.dubbo.IGpHello"  ref="gpHelloService" protocol="dubbo" version="1.1.1"/>
<!--声明需要暴露的服务接口,指定协议为dubbo,设置版本号1.1.2-->
<dubbo:service interface="com.gupaoedu.dubbo.IDemoService"    ref="demoService" protocol="dubbo" version="1.1.2"/>

<!--和本地服务一样实现服务-->
<bean id="gpHelloService" class="com.gupaoedu.dubbo.GpHelloImpl"/>

<bean id="demoService" class="com.gupaoedu.dubbo.DemoService"/>
</beans>

服务端的接口以及实现类

public interface IGpHello {String sayHello(String msg);}
public interface IDemoService {String protocolDemo(String msg);}
public class GpHelloImpl implements IGpHello{
@Override
public String sayHello(String msg) {return "Hello:"+msg;}
}
public class GpHelloImpl2 implements IGpHello{
@Override
public String sayHello(String msg) {return "Hello,i‘m server 2:"+msg;}
}

编写Main方法,用spring容器来启动服务

public class Main {
public static void main(String[] args) throws IOException {
//默认情况下会使用spring容器来启动服务
com.alibaba.dubbo.container.Main.main(new String[]{"spring","log4j"});}
}

服务启动过程会进行服务注册,启动监听端口,启动服务之后

在客户端通过远程调用访问服务端发布的服务,相应的客户端配置文件 dubbo-client.xml 如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--提供方信息-->
<dubbo:application name="dubbo-client" owner="mic"/>

<!--注册中心-->
<dubbo:registry id="zokeeper" address="zookeeper://192.168.126.129:2181?register=false" file="d:/dubbo-server"/>

<!--声明需要暴露的服务接口,指定版本号-->
<dubbo:reference id="gpHelloService" interface="com.gupaoedu.dubbo.IGpHello" registry="zookeeper" version="1.1.1"/>
</beans>

其实我们可以在zookeeper的客户端可以发现,事实上已经发布了服务方已经发布了两个不同版本的服务,具体如下

1 dubbo%3A%2F%2F192.168.126.1%3A20880%2Fcom.gupaoedu.dubbo.IDemoService%3Fanyhost%3Dtrue%26application%3Ddubbo-server%26dubbo%3D2.5.3%26interface%3Dcom.gupaoedu.dubbo.IDemoService%26methods%3DprotocolDemo%26owner%3Dmic%26pid%3D22548%26revision%3D1.1.2%26side%3Dprovider%26timestamp%3D1530450331827%26version%3D1.1.2
2 dubbo%3A%2F%2F192.168.126.1%3A20880%2Fcom.gupaoedu.dubbo.IGpHello%3Fanyhost%3Dtrue%26application%3Ddubbo-server%26dubbo%3D2.5.3%26interface%3Dcom.gupaoedu.dubbo.IGpHello%26methods%3DsayHello%26owner%3Dmic%26pid%3D22548%26revision%3D1.1.1%26side%3Dprovider%26timestamp%3D1530450325703%26version%3D1.1.1

我们知道,这两个版本正是我们在服务发布方设置的不同版本号,同样的,在消费端,我们可以通过设置指定的版本号获取相应的版本服务,消费的代码如下

public class App{
         public static void main( String[] args ) throws IOException, InterruptedException {
                   ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("dubbo-client.xml");
                    context.start();
                   IGpHello demoService = (IGpHello)context.getBean("gpHelloService");//获取远程服务代理
                  String hello = demoService.sayHello("world");//执行远程调用方法
                  System.out.println(hello);//显示调用结果
         }
}

在控制台,我们可以看到同样的服务发布地址url。

  

  

  

  

  

  

  

原文地址:https://www.cnblogs.com/yxh1008/p/9251693.html

时间: 2024-11-02 23:46:09

Dubbo常用配置及源码解析-多版本支持的相关文章

聊聊Dubbo - Dubbo可扩展机制源码解析

摘要: 在Dubbo可扩展机制实战中,我们了解了Dubbo扩展机制的一些概念,初探了Dubbo中LoadBalance的实现,并自己实现了一个LoadBalance.是不是觉得Dubbo的扩展机制很不错呀,接下来,我们就深入Dubbo的源码,一睹庐山真面目. 在Dubbo可扩展机制实战中,我们了解了Dubbo扩展机制的一些概念,初探了Dubbo中LoadBalance的实现,并自己实现了一个LoadBalance.是不是觉得Dubbo的扩展机制很不错呀,接下来,我们就深入Dubbo的源码,一睹庐

Android 常用开源框架源码解析 系列 (九)dagger2 呆哥兔 依赖注入库

一.前言 依赖注入定义 目标类中所依赖的其他的类的初始化过程,不是通过手动编码的方式创建的. 是将其他的类已经初始化好的实例自动注入的目标类中. "依赖注入"也是面向对象编程的 设计模式 -----组合的配套使用 作用 :降低程序的耦合,耦合就是因为类之间的依赖关系所引起的 产生场景:在一个对象里去创建另一个对象的实例 问题:过多的类,对象之间的依赖会造成代码难以维护. 不符合开闭原则的对象的引用写法:错误示例: public class ClassA { classB b ; pub

Android 常用开源框架源码解析 系列 (十)Rxjava 异步框架

一.Rxjava的产生背景 一.进行耗时任务 传统解决办法: 传统手动开启子线程,听过接口回调的方式获取结果 传统解决办法的缺陷: 随着项目的深入.扩展.代码量的增大会产生回调之中套回调的,耦合度高度增加的不利场景.对代码维护和扩展是很严重的问题. RxJava本质上是一个异步操作库 优点: 使用简单的逻辑,处理复杂 ,困难的异步操作事件库;在一定程度上替代handler.AsyncTask等等 二.传统的观察者模式 使用场景 1.一个方面的操作依赖于另一个方面的状态变化 2.如果在更改一个对象

Android 常用开源框架源码解析 系列 (十一)picasso 图片框架

一.前言 Picasso 强大的图片加载缓存框架 api加载方式和Glide 类似,均是通过链式调用的方式进行调用 1.1.作用 Picasso 管理整个图片加载.转换.缓存等策略 1.2.简单调用: Picasso .with(this 传入一个单例,上下文).load("url"/file文件/资源路径) .into() 1.2.1 .一些简单的链式调用参数 .placeholder(R.drawable.xx)  //网络未加载完成的时候显示的本地资源图片 .error(R.dr

Android 开源项目源码解析(第二期)

Android 开源项目源码解析(第二期) 阅读目录 android-Ultra-Pull-To-Refresh 源码解析 DynamicLoadApk 源码解析 NineOldAnimations 源码解析 SlidingMenu 源码解析 Cling 源码解析 BaseAdapterHelper 源码分析 Side Menu.Android 源码解析 DiscreteSeekBar 源码解析 CalendarListView 源码解析 PagerSlidingTabStrip 源码解析 公共

SearchView源码解析

原文地址:https://github.com/nukc/SearchViewAnalysis/blob/master/README.md SearchView是一个搜索框控件,样式也挺好看的.这次解析主要围绕android.support.v7.widget包下的SearchView(API >= 7),android.widget.SearchView支持API >= 11, 另外有个android.support.v4.widget.SearchViewCompat. 目录 1. 源码解

GlusterFS源码解析 —— GlusterFS 配置

GlusterFS 源码安装方式:http://blog.csdn.net/wangyuling1234567890/article/details/25519261 1.GlusterFS的典型架构图 2.GlusterFS常用translators(中继) 2.1.1.    storage/posix type storage/posix storage/posix的作用是指定一个本地目录给GlusterFS内的一个卷使用. 配置例子: volume posix-example type

Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析

Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析 本文简要介绍了基于 Spring 的 web project 的启动流程,详细分析了 Spring 框架将开发人员基于 XML 定义的 Bean 信息转换为 Spring 框架的 Bean Definition 对象的处理过程,向读者展示了 Spring 框架的奥妙之处,可以加深开发人员对 Spring 框架的理解. 0 评论: 秦 天杰, 软件工程师, IBM China 2013 年 9 月 02 日 内容 在 IBM

dubbo源码解析-zookeeper创建节点

前言 在之前dubbo源码解析-本地暴露中的前言部分提到了两道高频的面试题,其中一道dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?在上周的dubbo源码解析-zookeeper连接中已经讲到,这周解析的是另一道,即服务提供者能实现失效踢出是根据什么原理? 上周就有朋友问到我,为什么我的源码解析总是偏偏要和面试题挂上钩呢?原因很简单 1.dubbo源码这么多,试问你从哪里做为切入点?也就是说该从哪里看起?所以以面试题为切入点,你可以理解为我是在回答"