dubbo-版本控制

有时候,我们发现线上的版本有缺陷、或者需要升级服务,这时候需要利用DUBBO多版本的特性对服务进行升级。下面引用DUBBO官方的 最佳实践-版本部分 的说明,可以详细了解到,当我们面临服务升级时,应该怎么做。

  • 每个接口都应定义版本号,为后续不兼容升级提供可能,如:<dubbo:service interface="com.xxx.XxxService" version="1.0" />
  • 建议使用两位版本号,因为第三位版本号通常表示兼容升级,只有不兼容时才需要变更服务版本。
  • 当不兼容时,先升级一半提供者为新版本,再将消费者全部升为新版本,然后将剩下的一半提供者升为新版本。

OK,下面开始撸码。实例中定义了两个服务提供者,他俩实现了同样的接口,分别是1.0.0和1.0.1,因为只在内部优化了算法,并没有修改接口,所以可以继续兼容。服务消费者则随机访问提供者的版本。

  • 服务提供者-1

服务接口:

public interface DemoService {
	public String saySomething();
}

服务实现:

public class DemoServiceImpl implements DemoService {
	@Override
	public String saySomething() {
		return "我是服务提供者1";
	}
}

dubbo配置:

	<!-- 配置Bean -->
	<bean id="demoService"
		class="com.github.thinwonton.dubbo.sample.multiversion.service.DemoServiceImpl" />

	<!-- 指定web服务名字 -->
	<dubbo:application name="multi-version-provider" />
	<!-- 声明服务注册中心 -->
	<!-- 使用zookeeper作为注册中心 -->
	<dubbo:registry protocol="zookeeper" address="192.168.88.15:2181" />
	<!-- 指定传输层通信协议 -->
	<dubbo:protocol name="dubbo" port="20880" />
	<!-- 暴露服务地址,该服务的实现类是demoService的引用 -->
	<dubbo:service ref="demoService"
		interface="com.github.thinwonton.dubbo.sample.multiversion.service.DemoService"
		protocol="dubbo" version="1.0.0"/>
  • 服务提供者-2

与服务提供者-1相比,只是服务的实现和服务版本的不同。

服务实现:

public class DemoServiceImpl implements DemoService {
	@Override
	public String saySomething() {
		return "我是服务提供者2";
	}
}

DUBBO配置:

	<!-- 配置Bean -->
	<bean id="demoService"
		class="com.github.thinwonton.dubbo.sample.multiversion.service.DemoServiceImpl" />

	<!-- 指定web服务名字 -->
	<dubbo:application name="multi-version-provider" />
	<!-- 声明服务注册中心 -->
	<!-- 使用zookeeper作为注册中心 -->
	<dubbo:registry protocol="zookeeper" address="192.168.88.15:2181" />
	<!-- 指定传输层通信协议 -->
	<dubbo:protocol name="dubbo" port="20881" />
	<!-- 暴露服务地址,该服务的实现类是demoService的引用 -->
	<dubbo:service ref="demoService"
		interface="com.github.thinwonton.dubbo.sample.multiversion.service.DemoService"
		protocol="dubbo" version="1.0.1"/>

当我们启动这两个服务后,通过DUBBO的管理控制平台,可以查询到服务的发布信息: 输入图片说明

  • 服务消费者 主程序:
public class ConsumerMain {
	public static void main(String[] args) throws IOException {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
		DemoService demoService = (DemoService) applicationContext.getBean("demoService");
		for (int i = 0; i < 10; i++) {
			System.out.println("消费者1:" + demoService.saySomething());
		}
	}
}

DUBBO配置:

	<!-- 指定web应用名字 -->
	<dubbo:application name="multi-version-consumer" />
	<!-- 声明服务注册中心 -->
	<dubbo:registry protocol="zookeeper" address="192.168.88.15:2181" />
	<!-- 引用服务,demoService仅用于根据接口生成动态代理,默认使用javassist生成代理对象 -->
	<dubbo:reference id="demoService"
		interface="com.github.thinwonton.dubbo.sample.multiversion.service.DemoService"
		protocol="dubbo" version="*"/>

这里消费者配置为可以访问任意版本。当我们运行主程序后,可以看到消费者随机访问服务提供者。如果我们指定了版本号为具体版本,则只会访问某个版本的提供者。

转载于:https://my.oschina.net/thinwonton/blog/853416

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件介绍:   dubboadmin的控制台插件最新版本,提供本地下载,可以可视化的监控dubbo服务注册和消费情况。  运行dubbo admin server  dubbo admin server是一个标准的spring boot项目, 可以在任何java IDE中运行它运行dubbo admin ui  dubbo admin ui由npm管理和构建,在开发环境中,可以单独运行: npm run dev为了方便开发,我们提供了这种前后端分离的部署模式,主要的好处是支持前端热部署,在这种模式下,前端会通过8080端口访问后端的restful api接口,获取数据, 这将导致跨域访问的问题。  Dubbo Admin后端配置  当前版本的的Dubbo Admin支持Dubbo2.7的新特性(元数据展示,应用级别的配置),同时也兼容Dubbo2.6的用法,两个版本的配置不同,具体介绍如下:  application.properties配置  dubbo.config.center: 2.7的配置,推荐用法,填写配置中心的地址,并且在配置中心的相应目录下配置注册中心和元数据中心的地址,Dubbo Admin会根据相应的协议,初始化对应的客户端,实现对配置中心,元数据中心的访问    dubbo.registry.address: 2.6的配置,只配置注册中心的地址。采用此配置,Dubbo Admin会把配置,元数据相关的内容也写入注册中心的不同目录下    两种配置,都可以兼容Dubbo2.6和2.7的版本,即使配置了dubbo.config.center,对于2.6版本的客户端,也会收到对应版本的路由,动态配置规则,并且按照规则内容生效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值