版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZuoAnYinXiang/article/details/51250844
package com.baizhi.service.impl;
import com.baizhi.service.IDemoService;
public class DemoService_v1 implements IDemoService {
public int sum(Integer x, Integer y) {
try{
Thread.sleep(3000);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return x+y;
}
public int multi(Integer x, Integer y) {
try{
Thread.sleep(5000);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return x*y;
}
public String methodInvoke() {
// TODO Auto-generated method stub
return "1.1.0版本";
}
}
package com.baizhi.service.impl;
import com.baizhi.service.IDemoService;
public class DemoService_v1 implements IDemoService {
public int sum(Integer x, Integer y) {
try{
Thread.sleep(3000);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return x+y;
}
public int multi(Integer x, Integer y) {
try{
Thread.sleep(5000);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return x*y;
}
public String methodInvoke() {
// TODO Auto-generated method stub
return "1.1.0版本";
}
}
package com.baizhi.service.impl;
import com.baizhi.service.IDemoService;
public class DemoService_v2 implements IDemoService {
public int sum(Integer x, Integer y) {
return x+y;
}
public int multi(Integer x, Integer y) {
return x*y;
}
public String methodInvoke() {
// TODO Auto-generated method stub
return "1.1.1版本";
}
}
<?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="Dubbo_HelloWorld"/>
<!-- 声明服务注册中心 -->
<dubbo:registry protocol="zookeeper" address="192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181"/>
<!-- 指定传输层通信协议 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 暴露你的服务地址 -->
<dubbo:service
ref="demoService1"
interface="com.baizhi.service.IDemoService"
protocol="dubbo"
version="1.1.0"
/>
<dubbo:service
ref="demoService2"
interface="com.baizhi.service.IDemoService"
protocol="dubbo"
version="1.1.1"
/>
</beans>
消费者
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.expression.spel.ast.Identifier;
import com.alibaba.dubbo.rpc.RpcContext;
import com.baizhi.service.IDemoService;
public class DubboUseage {
public static void main(String[] args) throws IOException, Exception, ExecutionException {
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
/*//这个demoService是生成的动态代理类
IDemoService demoService=(IDemoService) ctx.getBean("demoService");
//打印代理类型 底层dubbo使用NIO的RCP做远程调度
System.out.println("打印引用类型:"+demoService.getClass());*/
/*
//测试远程方法调度
int sum=demoService.sum(6, 3);
System.out.println("和:"+sum);
int ji = demoService.multi(9, 3);
System.out.println("乘积:"+ji);*/
/* long start=System.currentTimeMillis();
demoService.sum(1, 2);
Future<Integer> sumRes = RpcContext.getContext().getFuture();
demoService.multi(12, 13);
Future<Integer> multiRes = RpcContext.getContext().getFuture();
System.out.println("sum:"+sumRes.get()+",multi:"+multiRes.get());
long end=System.currentTimeMillis();
System.out.println("总共耗时:"+(end-start)/1000+"秒");*/
//访问新版本
IDemoService demoService1=(IDemoService) ctx.getBean("demoService1");
System.out.println(demoService1.methodInvoke());
//访问old版本
IDemoService demoService2=(IDemoService) ctx.getBean("demoService2");
System.out.println(demoService2.methodInvoke());
//访问随机版本
IDemoService demoService3=(IDemoService) ctx.getBean("demoService3");
System.out.println(demoService3.methodInvoke());
}
}
消费者端的配置文件
<?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="Dubbo_HelloWorld_ref"/>
<!-- 作为服务的消费者要和服务的提供者连接同一个服务注册中心 -->
<dubbo:registry protocol="zookeeper" address="192.168.30.165:2181,192.168.30.166:2181"/>
<!-- 指定传输层通信协议 因为在同一台机器测试,所以端口不一样-->
<dubbo:protocol name="dubbo" port="20881"/>
<!-- 使用已经注册过的服务
id="demoService" 这个是给本地的程序使用的,本工程的程序可以相当于用一个普通的bean,去使用这个接口的引用
例:ctx.getBean("demoService")
这个得到的bean并不是真正的实现类,而是动态生成的代理类
dubbo:service 这个是服务的提供者
dubbo:reference 这个是用来引用一个dubbo服务
注:dubbo引用服务全部是靠的接口名
interface="com.baizhi.service.IDemoService"
-->
<!-- 暴露你的服务地址 -->
<dubbo:reference
id="demoService1"
interface="com.baizhi.service.IDemoService"
protocol="dubbo"
version="1.1.0"
/>
<dubbo:reference
id="demoService2"
interface="com.baizhi.service.IDemoService"
protocol="dubbo"
version="1.1.1"
/>
<dubbo:reference
id="demoService3"
interface="com.baizhi.service.IDemoService"
protocol="dubbo"
version="*"
/>
</beans>