在dubbo的文档中说:
当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。在低压力时间段,先升级一半提供者为新版本再将所有消费者升级为新版本然后将剩下的一半提供者升级为新版本<dubbo:service interface="com.foo.BarService" version="1.0.0" /><dubbo:service interface="com.foo.BarService" version="2.0.0" /><dubbo:reference id="barService" interface="com.foo.BarService" version="1.0.0" /><dubbo:reference id="barService" interface="com.foo.BarService" version="2.0.0" />不区分版本:(2.2.0以上版本支持)<dubbo:reference id="barService" interface="com.foo.BarService" version="*" />
示例
服务提供方
package com.dubbosample.service;public interface IDubbodoSomethingService { public String doSomething(); }
package com.dubbosample.service.impl;import com.dubbosample.service.IDubbodoSomethingService;public class DubbodoSomething1ServiceImpl implements IDubbodoSomethingService { @Override public String doSomething() { logger.info( "v1 版本"); return "----"; } }
package com.dubbosample.service.impl; import com.dubbosample.service.IDubbodoSomethingService;public class DubbodoSomething2ServiceImpl implements IDubbodoSomethingService { @Override public String doSomething() { logger.info( "v2 版本"); return "*****"; }}
下面是spring应用的配置
applicationContext.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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <bean id="serviceVersion1" class="com.dubbosample.service.impl.DubbodoSomething1ServiceImpl"/> <bean id="serviceVersion2" class="com.dubbosample.service.impl.DubbodoSomething2ServiceImpl"/> <import resource="classpath:dubbo.xml"/> </beans>
dubbo.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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="DubbodoSomething"/> <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/> <dubbo:protocol name="dubbo" port="20880"/> <dubbo:protocol name="rmi" port="1099"/> <dubbo:service ref="serviceVersion1" interface="com.dubbosample.service.IDubbodoSomethingService" protocol="dubbo,rmi" version="1.0.0" /> <dubbo:service ref="serviceVersion2" interface="com.dubbosample.service.IDubbodoSomethingService" protocol="dubbo,rmi" version="1.0.1" /> </beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
客户端
package com.dubbosample.service;public interface IDubbodoSomethingService { public String doSomething(); }
applicationContext.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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <import resource="classpath:dubbo.xml"/> </beans>
dubbo.xml 配置:
在这里也配置了服务的多个版本实现引用,使用version
<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="DubbodoSomething"/> <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/> <dubbo:protocol name="dubbo" port="20881"/> <dubbo:protocol name="rmi" port="1010"/> <dubbo:reference id="serviceVersion1" interface="com.dubbosample.service.IDubbodoSomethingService" protocol="dubbo" version="1.0.0" /> <dubbo:reference id="serviceVersion2" interface="com.dubbosample.service.IDubbodoSomethingService" protocol="dubbo" version="1.0.1" /> <dubbo:reference id="serviceVersion3" interface="com.dubbosample.service.IDubbodoSomethingService" protocol="dubbo" version="*" /> </beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
客户端代码
package com.dubbosample.serviceimport java.io.IOExceptionimport org.springframework.context.ApplicationContextimport org.springframework.context.support.ClassPathXmlApplicationContextpublic class DubboStart{ public static void main(String[] args) throws IOException { ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml") //访问 v1 版本 IDubbodoSomethingService serviceVersion1=(IDubbodoSomethingService) ctx.getBean("serviceVersion1") System.out.println(serviceVersion1.doSomething()) //访问 v2 版本 IDubbodoSomethingService serviceVersion2=(IDubbodoSomethingService) ctx.getBean("serviceVersion2") System.out.println(serviceVersion2.doSomething()) //访问随机版本 IDubbodoSomethingService serviceVersion3=(IDubbodoSomethingService) ctx.getBean("serviceVersion3") System.out.println(serviceVersion3.doSomething()) }}