当一个接口实现,出现不兼容升级时,可用使用版本号过度,版本号不同的服务间不引用。实现代码如下:
服务器端代码实现:
package com.yncp.dubbo.service;
public interface IDubboVersionService {
public String Version();
}
package com.yncp.dubbo.service.impl;
import com.yncp.dubbo.service.IDubboVersionService;
public class DubboVersion1ServiceImpl implements IDubboVersionService {
@Override
public String Version() {
return "1.0.0版本";
}
}
package com.yncp.dubbo.service.impl;
import com.yncp.dubbo.service.IDubboVersionService;
public class DubboVersion2ServiceImpl implements IDubboVersionService {
@Override
public String Version() {
return "1.0.1版本";
}
}
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 -->
<bean id="versionService1" class="com.yncp.dubbo.service.impl.DubboVersion1ServiceImpl"/>
<bean id="versionService2" class="com.yncp.dubbo.service.impl.DubboVersion2ServiceImpl"/>
<!-- 引入配置文件 -->
<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">
<!-- 指定web服务名字 -->
<dubbo:application name="DubboVersion"/>
<!-- 声明服务注册中心 -->
<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="versionService1"
interface="com.yncp.dubbo.service.IDubboVersionService"
protocol="dubbo,rmi"
version="1.0.0"
/>
<dubbo:service
ref="versionService2"
interface="com.yncp.dubbo.service.IDubboVersionService"
protocol="dubbo,rmi"
version="1.0.1"
/>
</beans>
客户端实现代码:
package com.yncp.dubbo.service;
public interface IDubboVersionService {
public String Version();
}
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 配置:
<?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">
<!-- 指定web服务名字 -->
<dubbo:application name="DubboVersion"/>
<!-- 声明服务注册中心 -->
<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="versionService1"
interface="com.yncp.dubbo.service.IDubboVersionService"
protocol="dubbo"
version="1.0.0"
/>
<dubbo:reference
id="versionService2"
interface="com.yncp.dubbo.service.IDubboVersionService"
protocol="dubbo"
version="1.0.1"
/>
<dubbo:reference
id="versionService3"
interface="com.yncp.dubbo.service.IDubboVersionService"
protocol="dubbo"
version="*"
/>
</beans>
客户端调用代码:
package com.yncp.dubbo.service;
import java.io.IOException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DubboStart{
//<dubbo:reference id="demoService" interface="com.baizhi.service.IDemoService" protocol="dubbo" check="false" />
public static void main(String[] args) throws IOException {
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
//访问1.0.0版本
IDubboVersionService versionService1=(IDubboVersionService) ctx.getBean("versionService1");
System.out.println(versionService1.Version());
//访问1.0.1版本
IDubboVersionService versionService2=(IDubboVersionService) ctx.getBean("versionService2");
System.out.println(versionService2.Version());
//访问随机版本
IDubboVersionService versionService3=(IDubboVersionService) ctx.getBean("versionService3");
System.out.println(versionService3.Version());
}
}