java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > dubbo的超时处理及重试原则

关于dubbo的超时处理及重试原则

作者:一切为了实战

这篇文章主要介绍了关于dubbo的超时处理及重试原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

由于网络或服务端不可靠,会导致调用出现一种不确定的中间状态(超时)。

为了避免超时导致客户端资源(线程)挂起耗尽,必须设置超时时间。

超时时间可以使用 timeout="超时次数" 来设置当消费者请求一个服务时出现错误,会重试连接其他的服务器,但重试会带来更多的延迟。

重试次数可以使用 retries=重试次数 来设置。

1. 注解配置如下

具体步骤:

消费者的配置

@Service
public class OrderServiceImpl implements OrderService {
	@Reference(timeout=3000, retries=2)
	private UserService userService;
	@Override
	public List<Address> getAddress(String userId) {
		return userService.getAddress();
	}
}

提供者的配置

@Service(retries=5)
public class UserServiceImpl implements UserService{
	private static List<Address> address = new ArrayList<>();
	static {
		address.add(new Address(1, "武汉", "young"));
		address.add(new Address(2, "河源", "xian"));
	}
	@Override
	public List<Address> getAddress() {
		System.out.println("provider---1");
		return address;
	}
}

2. 在xml文件中配置

在xml文件中配置有多个级别,一个是全局级配置,一个是接口级配置,一个是方法级配置;

在提供者中的配置

方法一,全局级配置:

<dubbo:provider timeout="超时时间" retries="2"></dubbo:provider>

方法二,接口级配置:

<dubbo:service interface="com.young.service.UserService" ref="userServiceImpl" timeout="超时时间" retries="重试次数">
		<dubbo:method name="getAddress"></dubbo:method>
	</dubbo:service>

方法三,方法级配置:

<dubbo:service interface="com.young.service.UserService" ref="userServiceImpl" >
		<dubbo:method name="getAddress" timeout="超时时间" retries="重试次数"></dubbo:method>
</dubbo:service>

其中方法级的配置的优先级>接口级配置的优先级>全局级配置的优先级

在消费者中的配置

方法一,全局级配置:

<dubbo:consumer timeout="超时时间" retries="重试次数"></dubbo:consumer>

方法二,接口级配置

<dubbo:reference interface="com.young.service.UserService" id="userService"  timeout="超时时间" retries="重试次数">
	<dubbo:method name="getAddress" timeout="3000" retries="2"></dubbo:method>
</dubbo:reference>

方法三,方法级配置:

<dubbo:reference interface="com.young.service.UserService" id="userService">
	<dubbo:method name="getAddress" timeout="超时时间" retries="重试次数"></dubbo:method>
</dubbo:reference>

和提供者一样,消费者的优先级顺序为方法级的配置的优先级>接口级配置的优先级>全局级配置的优先级

配置的原则

dubbo推荐在Provider上尽量多配置Consumer端属性:

配置的覆盖规则

timeout和retries是两个不同的参数,可以设置在不同的级别,但都遵循覆盖原则。

以上面的覆盖规则可以得到如下的所有情况:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文