Dubbox 基本特性之直接调用

言归正传,如果服务消费者获取到服务提供者的地址就可以跳过注册中心,完成服务消费者直接调用服务提供者了,完成直连调用的功能。

直接调用这样的功能,其实很实用,在开发环境中,场景是程序猿A机器本地启一个Tomcat提供一个服务,程序猿B机器获取到程序猿B的机器IP和暴露的服务的端口号,直接调用,这样可以方便调试,因为走正常的注册中心,可能程序猿C也是服务提供者,它也启动了Tomcat,注册中心根据负载均衡的算法,把请求发送给程序猿C,那么就是悲剧了,不利于开发环境的联调,所以直接调用还是有它的使用场景的

3.4.1 Dubbo直接调用实现的Demo

Dubbo作为RPC的始祖,它肯定是支持直接调用的,而且配置相当简单,服务提供者不用做任何修改,我们可以使用第一章的IDemoService那个helloworld的版本的作为服务提供者,只需要简单修改一下服务消费者的spring的配置文件就可以了spring-dubbo-consumer-direct.xml

<?xml version="1.1" 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">
       
    <dubbo:application owner="lyncc" name="bazinga-consumer" />
    
    <dubbo:reference id="demoService" interface="org.bazinga.service.IDemoService" url="dubbo://localhost:20880/"/> 
    
</beans>

我们可以清晰地看清楚配置文件的改变,多了一个URL,

然后就是在代码的调用上,不管是使用注册中心服务的发现还是直连来说,对于调用还是很透明的,与普通的调用方式是一样的

package org.bazinga.service.test;

import org.bazinga.service.IDemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DubboConsumerDirectInvokeService {
	
	public static void main(String[] args) throws InterruptedException {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				"spring-dubbo-consumer-direct.xml");
		context.start();
		IDemoService demoService = (IDemoService)context.getBean("demoService");
		System.out.println(demoService.sayHello());
		Thread.sleep(2000000l);
	}

}

启动测试服务类DubboxProviderDemoService.java,然后再启动DubboConsumerDirectInvokeService.java,发现服务消费者能正常消费


我们再看一眼监控中心的控制台,显示没有消费者,这就说明我们没有通过注册中心发现服务,而是通过直接调用的方式,完成远程调用的:


3.4.2 本章小结

本章主要说明了在RPC框架Dubbo对直接调用的支持,也稍微说明了直接调用的使用场景,直接调用适用于开发调试阶段,方便程序的调试,但是在线上环境,直接调用是不建议被采纳的,因为如果服务提供者的地址修改之后,服务消费者需要修改代码,并且也不方便服务的管理,注册中心的好处不必多说,如果直接调用,注册中心不能对此服务进行管理,统计,审核等,是不符合服务治理这个理念的。



经验分享 程序员 微信小程序 职场和发展