1、超时设置

试想,当服务提供方执行某方法或由于网络原因导致消费方调用线程大量阻塞。

为了避免这种情况,服务的提供方设置超时属性。超时单位为毫秒。默认值是1000毫秒

1、超时规则

1、精确优先规则

方法级优先,接口级次之,全局配置再次之。

2、消费者设置优先

如果级别一样,则消费方优先,提供方次之。

方法级别->接口级别->统一配置

消费方->提供方

如果消费方接口级别,提供方方法级别,则提供方方法级别优先,因为级别不一样,第二原则的前提是级别一样,所以只适合第一精确优先级别。

2、重试次数

不包括第一次,若设置为3,实际会连接4次,4次失败才会放弃重试

1幂等与非幂等

查询、删除、更改等为幂等操作,可以重试。非幂等操作如新增不能重试,因为会造成数据出错。

3、Dubbo_配置_多版本

以UserService为例,两个不同的实现1、2。启动1、2两个版本的provider。然后消费者指定相应的提供者,实现一部分消费者先使用老版本的实现,稳定后全部消费新版,也可以在consumer中指定*——随机消费不同的provider。

4、本地存根

1、为啥有本地存根?

有某种需求例如在调用provider之前首先进行参数验证、缓存等操作。此时就可以编写一个本地存根,比如说参数满足本地存根的某个条件时,再通过本地代理对象调用远程provider的serviceImpl,不满足就不调用

2、怎么实现?

提供Stub的实现

本地stub实现远程的Service,提供有参构造器,dubbo自动注入该参数,在逻辑代码中进行判断,判断满足时调用Service调用远程方法服务。

UserServiceStub.java

package com.atguigu.gmall.service.impl;

import java.util.List;

import org.springframework.util.StringUtils;

import com.atguigu.gmall.bean.UserAddress;

import com.atguigu.gmall.service.UserService;

public class UserServiceStub implements UserService {

private final UserService userService;

/**

* 传入的是userService远程的代理对象

* @param userService

*/

public UserServiceStub(UserService userService) {

super();

this.userService = userService;

}

@Override

public List getUserAddressList(String userId) {

// TODO Auto-generated method stub

System.out.println("UserServiceStub.....");

if(!StringUtils.isEmpty(userId)) {

return userService.getUserAddressList(userId);

}

return null;

}

}

consumer中原本应该如下配置,配置在provider的dubbo:service中

在这里配置到消费者的dubbo:refrence中

3、本地存根的位置

在实际的开发中,本地存根的代码应该放在公共的接口工程中,如gmall-interface工程的service目录下。配置在consumer.xml文件中dubbo:refrence中(存疑)

Copyright © 2088 2017乒乓球世界杯_世界杯体彩 - uzhiqu.com All Rights Reserved.
友情链接