Dubbo之API配置

Dubbo之API配置

说明

项目上要为消费者写个生产者模拟器,用xml配置好了生产者,调试了很久,才想到消费者是api直接配置的,是不是生产者也必须api直接调用,写完测试代码才调通接口,所以记录下代码以便参考。

消费者代码示例

public class TongdunTest2 {
	public static void main(String[] args) {
		try {
			ITdCtsService service = getTdCtsService();
			TongdunReq req = new TongdunReq();
			req.setAccountMobile("111");
			service.callService(req);
			service.getLocalData("111111");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static ITdCtsService getTdCtsService() {
		ITdCtsService tdCtsService = null;
		ApplicationConfig application = getApplication();
		RegistryConfig registry = getRegistry();
		ReferenceConfig<ITdCtsService> reference = new ReferenceConfig<ITdCtsService>();
		reference.setApplication(application);
		reference.setRegistry(registry);
		reference.setInterface(ITdCtsService.class);
		reference.setVersion("*");
		reference.setProtocol("dubbo");
		reference.setGroup("dubbo");
		tdCtsService = reference.get();
		return tdCtsService;
	}

	public static ApplicationConfig getApplication() {
		ApplicationConfig application = new ApplicationConfig();
		application.setName("cash");
		return application;
	}

	public static RegistryConfig getRegistry() {
		RegistryConfig registry = null;
		if (registry == null) {
			registry = new RegistryConfig();
			registry.setAddress("127.0.0.1:2181");
			registry.setProtocol("zookeeper");
			registry.setGroup("dubbo");
			registry.setCheck(false);
		}
		return registry;
	}

}

生产者代码示例

class TdCtsRunnable implements Runnable {

	@Override
	public void run() {
		try {
			TestProviderApi2.providerTdCtsService();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

public class TestProviderApi2 {

	public static void main(String[] arg) {
		try {

			Runnable tdCtsRunnable = new TdCtsRunnable(); // 创建一个Runnable实现类的对象
															// target创建新的线程

			Thread thread3 = new Thread(tdCtsRunnable);
			thread3.start();
			System.out.println("启动线程结束");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void providerTdCtsService() throws InterruptedException {

		// (4.3.1-1)等价于 <bean id="userService" class="com.test.UserServiceImpl"
		// />
		ITdCtsService userService = new ITdCtsServiceImpl();
		// (4.3.1-2)等价于 <dubbo:application name="dubboProvider" />
		ApplicationConfig application = getApplicationConfig();

		// (4.3.1-3)等价于 <dubbo:registry address="zookeeper://127.0.0.1:2181" />
		RegistryConfig registry = getRegistryConfig();

		// (4.3.1-4)等价于 <dubbo:protocol name="dubbo" port="20880" />
		ProtocolConfig protocol = getProtocolConfig();

		// 4.3.1-5)等价于 <dubbo:monitor protocol="registry" />
		MonitorConfig monitorConfig = getMonitorConfig();

		// 4.3.1-6)等价于 <dubbo:service interface="com.test.UserServiceBo"
		// ref="userService"
		// group="dubbo" version="1.0.0" timeout="3000"/>
		// 此实例很重,封装了与注册中心的连接,请自行缓存,否则可能造成内存和连接泄漏

		ServiceConfig<ITdCtsService> service = new ServiceConfig<ITdCtsService>();
		service.setApplication(application);
		service.setMonitor(monitorConfig);
		service.setRegistry(registry); // 多个注册中心可以用setRegistries()
		service.setProtocol(protocol); // 多个协议可以用setProtocols()
		service.setInterface(ITdCtsService.class);
		service.setRef(userService);
		service.setVersion("*");
		service.setGroup("dubbo");
		service.setTimeout(3000);
		service.export();
		// 4.3.1-8) 挂起当前线程
		Thread.currentThread().join();
	}

	public static RegistryConfig getRegistryConfig() {
		RegistryConfig registry = new RegistryConfig();
		registry.setAddress("127.0.0.1:2181");
		registry.setProtocol("zookeeper");
		return registry;
	}

	public static ProtocolConfig getProtocolConfig() {
		ProtocolConfig protocol = new ProtocolConfig();
		protocol.setName("dubbo");
		protocol.setPort(20880);
		return protocol;
	}

	public static ApplicationConfig getApplicationConfig() {
		ApplicationConfig application = new ApplicationConfig();
		application.setName("cash");
		return application;
	}

	public static MonitorConfig getMonitorConfig() {
		MonitorConfig monitorConfig = new MonitorConfig();
		monitorConfig.setProtocol("dubbo");
		return monitorConfig;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值