1、本地假装api
Mock一般用于服务降级,好比某验权服务,当服务提供方所有挂掉后,客户端不抛出异常,而是经过Mock数据返回受权失败。Mock是Stub的一个子集,便于服务提供方在客户端执行容错逻辑,因常常须要在出现RpcException(好比网络失败,超时等)时进行容错,而在出现业务异常(好比登陆用户名密码错误)时不须要容错,若是用Stub,可能就须要捕获并依赖RpcException类,而用Mock就能够不依赖RpcException,由于它的约定就是只有出现RpcException时才执行。缓存
实现:服务器
1) 在api中实现UserService接口,并按约定命名为UserServiceMock。此处咱们实现出现RpcException时,返回伪造数据,进行容错。网络
/** * Version: 3.0 * Author: pattywgm * Time: 17/6/5 下午4:24 * Desc: 容错处理 */ public class UserServiceMock implements UserService { /** * provider出现RpcException时,返回mock数据,进行容错处理 * * @return */ public List<UserVo> findAllUsers() { List<UserVo> userVos = new ArrayList<UserVo>(); userVos.add(new UserVo("000001", "默认用户", 22, "***********")); return userVos; } public UserVo findUserById(String id) { return new UserVo("000001", "默认用户", 22, "***********"); } }
2)在dubbo-consumer.xml中配置并发
<dubbo:reference id="userService" group="db" interface="com.patty.dubbo.api.service.UserService" timeout="10000" retries="3" mock="true" check="false"> </dubbo:reference>
设置 mock="true",表示启用容错处理,当出现RpcException时,服务端会在客户端执行容错逻辑,Mock的方法会被调用。ide
3)若是服务的消费方常常须要try-catch捕获异常,如:spa
Offer offer = null; try { offer = offerService.findOffer(offerId); } catch (RpcException e) { logger.error(e); }
请考虑改成Mock实现,并在Mock中return null。线程
若是只是想简单的忽略异常,在2.0.11以上版本可用:code
<dubbo:service interface="com.foo.BarService" mock="return null" />
2、延迟暴露xml
若是你的服务须要Warmup时间,好比初始化缓存,等待相关资源就位等,可使用delay进行延迟暴露,设置delay="5000"表示延迟5s暴露服务,delay="-1"表示延迟到Spring初始化完成后,再暴露服务,这样作能够避免Spring2.x初始化死锁问题。
3、并发控制
1) 服务端并发
<
dubbo:service
interface
=
"com.foo.BarService"
executes
=
"10"
/> 表示限制服务的各个方法,服务器端并发执行(或占用线程池线程数)不能超过10个。也能够指定特定方法的并发数,在<dubbo: method>中配置
2)客户端并发
<
dubbo:service
interface
=
"com.foo.BarService"
actives
=
"10"
/> 表示限制服务的各个方法,客户端并发执行(或占用链接的请求数)不能超过10个。也能够指定特定方法的并发数,在<dubbo: method>中配置。 actives属性也可在<dubbo: reference>中配置,而且若是<dubbo:service>和<dubbo:reference>都配了actives,<dubbo:reference>优先
4、链接控制
限制服务器端接受的链接不能超过10个:(以链接在Server上,因此配置在Provider上)
<dubbo:provider protocol="dubbo" accepts="10" /> or <dubbo:protocol name="dubbo" accepts="10" />
限制客户端服务使用链接链接数:(若是是长链接,好比Dubbo协议,connections表示该服务对每一个提供者创建的长链接数)
<dubbo:reference interface="com.foo.BarService" connections="10" /> or <dubbo:service interface="com.foo.BarService" connections="10" />
accepts是指定服务端的最大可接受链接数, connections则是指定客户端对每一个提供者的最大链接数,rmi、http、hessian等短链接协议表示限制链接数,dubbo等长链接协表示创建的长链接个数。
5、延迟链接
延迟链接,用于减小长链接数,当有调用发起时,再建立长链接,至关于一种懒加载的模式,只对使用长链接的dubbo协议生效。
<dubbo:protocol name="dubbo" lazy="true" />
6、粘滞链接
粘滞链接用于有状态服务,尽量让客户端老是向同一提供者发起调用,除非该提供者挂了,再连另外一台。粘滞链接将自动开启延迟链接,以减小长链接数。
<dubbo:protocol name="dubbo" sticky="true" />