Dubbo 测试用例 获取注册中心的其他服务


package com.xyebank.uk.user.service;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.fastjson.JSONObject;
import com.xyebank.uk.bill.api.BillUserAmountService;
import com.xyebank.uk.bill.api.vo.out.BalanceOutVo;
import com.xyebank.uk.user.api.UserInfoService;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class DubboTests {
	
	//这种方式也可以取到注册中心的服务(区别在于,这种方式取到的服务,优先是本地服务,取不到才取 远程服务)
	@Autowired
	UserInfoService userInfoService;
	
	//这种方式也可以取到注册中心的服务
	@Autowired
	BillUserAmountService billUserAmountService;
	
    @Test
    public void getService() throws Exception {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("test");
        
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("zookeeper://127.0.0.1:2181");
        
        //通过这种方式可以获取注册中心的服务
        ReferenceConfig reference = new ReferenceConfig<>();
        reference.setApplication(applicationConfig);
        reference.setRegistry(registry);
        reference.setInterface(BillUserAmountService.class);
        reference.setVersion("1.0.0");
        
        ReferenceConfig referenceUS = new ReferenceConfig<>();
        referenceUS.setApplication(applicationConfig);
        referenceUS.setRegistry(registry);
        referenceUS.setInterface(UserInfoService.class);
        referenceUS.setVersion("1.0.0");
        
        
        BillUserAmountService billUserAmountService2 = reference.get();
        UserInfoService userInfoService2 = referenceUS.get();
        
        System.out.println("取到的服务userInfoService:" +  userInfoService );
        System.out.println("取到的服务userInfoService2:" +  userInfoService2 );
        System.out.println("取到的服务billUserAmountService:" +  billUserAmountService  );
        System.out.println("取到的服务billUserAmountService2:" +  billUserAmountService2  );
        
        System.out.println("取到的服务:" +  JSONObject.toJSONString( userInfoService.queryById(444455694863835136L) ) );
        System.out.println("取到的服务billUserAmountService:" +  JSONObject.toJSONString( billUserAmountService.getBalance(444455694863835136L) ) );
        System.out.println("取到的服务billUserAmountService2:" +  JSONObject.toJSONString( billUserAmountService2.getBalance(444455694863835136L) ) );
        
    }


}

结果:可见 注入方式优先获取的 本地服务。通过 ReferenceConfig 只会获取到远程服务。