Dubbo学习(十二):服务多版本

版权声明:本文为博主原创文章,未经博主允许不得转载。 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>





猜你喜欢

转载自blog.csdn.net/ZuoAnYinXiang/article/details/51250844