DubboAPI 配置使用方式

最近有这么个需求:做自动化的接口测试的时候需要动态更改zookper的配置

以前用过Dubbo 但没有使用过Dubbo的API,于是查看了dubbo的官方教程 地址(http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E6%9C%8D%E5%8A%A1%E6%8F%90%E4%BE%9B%E8%80%85)



下边是官方给的例子

(1) 服务提供者:

importcom.alibaba.dubbo.rpc.config.ApplicationConfig;

importcom.alibaba.dubbo.rpc.config.RegistryConfig;

importcom.alibaba.dubbo.rpc.config.ProviderConfig;

importcom.alibaba.dubbo.rpc.config.ServiceConfig;

importcom.xxx.XxxService;

importcom.xxx.XxxServiceImpl;

// 服务实现

XxxService xxxService =newXxxServiceImpl();

// 当前应用配置

ApplicationConfig application =newApplicationConfig();

application.setName("xxx");

// 连接注册中心配置

RegistryConfig registry =newRegistryConfig();

registry.setAddress("10.20.130.230:9090");

registry.setUsername("aaa");

registry.setPassword("bbb");

// 服务提供者协议配置

ProtocolConfig protocol =newProtocolConfig();

protocol.setName("dubbo");

protocol.setPort(12345);

protocol.setThreads(200);

// 注意:ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口

// 服务提供者暴露服务配置

ServiceConfig service =newServiceConfig();// 此实例很重,封装了与注册中心的连接,请自行缓存,否则可能造成内存和连接泄漏

service.setApplication(application);

service.setRegistry(registry);// 多个注册中心可以用setRegistries()

service.setProtocol(protocol);// 多个协议可以用setProtocols()

service.setInterface(XxxService.class);

service.setRef(xxxService);

service.setVersion("1.0.0");

// 暴露及注册服务

service.export();



(2) 服务消费者:

importcom.alibaba.dubbo.rpc.config.ApplicationConfig;

importcom.alibaba.dubbo.rpc.config.RegistryConfig;

importcom.alibaba.dubbo.rpc.config.ConsumerConfig;

importcom.alibaba.dubbo.rpc.config.ReferenceConfig;

importcom.xxx.XxxService;

// 当前应用配置

ApplicationConfig application =newApplicationConfig();

application.setName("yyy");

// 连接注册中心配置

RegistryConfig registry =newRegistryConfig();

registry.setAddress("10.20.130.230:9090");

registry.setUsername("aaa");

registry.setPassword("bbb");

// 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接

// 引用远程服务

ReferenceConfig reference =newReferenceConfig();// 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏

reference.setApplication(application);

reference.setRegistry(registry);// 多个注册中心可以用setRegistries()

reference.setInterface(XxxService.class);

reference.setVersion("1.0.0");

// 和本地bean一样使用xxxService

XxxService xxxService = reference.get();// 注意:此代理对象内部封装了所有通讯细节,对象较重,请缓存复用



官方给的这个例子本以为可以直接套用 可现实就是这么残酷,用不了,于是开启了自己的探索之路

public static voidmain(String[] args)throwsException {

ClassPathXmlApplicationContext context =newClassPathXmlApplicationContext(newString[] {"applicationContext.xml"});

context.start();

// 当前应用配置

ApplicationConfig application =newApplicationConfig();

application.setName("hehe_consumer");

// 连接注册中心配置

RegistryConfig registry =newRegistryConfig();

//这里一定要有  zookeeper://

registry.setAddress("zookeeper://192.168.0.79:2181");

// 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接

// 引用远程服务

ReferenceConfig reference =newReferenceConfig();// 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏

reference.setApplication(application);

reference.setRegistry(registry);// 多个注册中心可以用setRegistries()

reference.setInterface(UserService.class);

reference.setVersion("1.0");

reference.setGroup("usercenter_soa_pro");

// 和本地bean一样使用xxxService

UserService userService =reference.get();// 注意:此代理对象内部封装了所有通讯细节,对象较重,请缓存复用

UserDto userById = userService.getUserById(1);

System.out.println(newGson().toJson(userById));

System.in.read();

}

}

你可能感兴趣的:(DubboAPI 配置使用方式)