微服务sprigcloudAlibaba+dubbo+nacos注册配置rpc调用问题调试

背景

微服务nacos注册中心,服务调用dubbo注册方式spring和nacos各有优缺点
其中nacos配置方式可以注册维度查询细粒度到接口,但是nacos中心上下线和权重功能失效

 

 

其中spring-cloud配置方式nacos中心上下线和权重功能正常,但是注册维度查询只能到服务级别,具体接口是否注册成功确无法查询

 #其中前缀spring-cloud说明:挂载到 Spring Cloud注册中心

dubbo.registry.address 注册中心地址


nacos+duboo官网

 

https://nacos.io/zh-cn/docs/use-nacos-with-dubbo.html

spring-cloud-alibaba-dubbo官网

https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_dubbo

问题

由于原有nacos配置的上下线和权重功能失效,现在改为spring-cloud配置,但是几次变更存在服务RPC调用服务异常问题,进行调试确认问题,制定可行性方案

验证说明

服务调用问题验证

服务调用订阅问题
序号预制描述测试结果备注
1provider和consumer都为nacos订阅调用正常
2不订阅调用正常
3provider为nacos,consumer为spring-cloud订阅调用正常
4不订阅调用异常
5provider为spring-cloud,consumer为spring-cloud订阅调用正常
6不订阅调用异常
7provider为spring-cloud,consumer为nacos订阅调用正常
8不订阅调用异常
9压测consumer为nacos,provider从nacos灰度到spring-cloud压测模拟调用正常,全过程无异常
10压测consumer为spring-cloud,provider从nacos灰度到spring-cloud压测模拟调用正常,全过程无异常

当消费者consumer和生产者provider中有一个使用spring-cloud注册中心地址,当消费者未订阅生产者时,会存在PRC请求异常。

所以,为避免出现以上问题,要求消费端必须订阅生产者应用。

 

压测灰度生产者注册地址变更,全过程无异常

上下线功能验证

上下线功能验证
序号预制描述测试结果备注
1provider和consumer都为nacos上下线功能未起作用
2provider为nacos,consumer为spring-cloud上下线功能未起作用
3provider为spring-cloud,consumer为spring-cloud上下线功能生效
4provider为spring-cloud,consumer为nacos上下线功能生效

当生产者注册中心连接方式为spring-cloud时,nacos控制台的上下线功能生效。

权重功能验证

权重功能验证
序号预制描述测试结果备注
1provider和consumer都为nacos权重功能未生效,轮询
2provider为nacos,consumer为spring-cloud权重功能未生效,轮询
3provider为spring-cloud,consumer为spring-cloud权重功能未生效,轮询
4provider为spring-cloud,consumer为nacos权重功能未生效,轮询

Ribbon内置的负载均衡规则并不支持 Nacos的权重,需要额外扩展

 

一、Dubbo 负载RPC调用源码

AbstractClusterInvoker

@Override

public Result invoke(final Invocation invocation) throws RpcException {

checkWhetherDestroyed();

// binding attachments into invocation.

Map<String, Object> contextAttachments = RpcContext.getContext().getObjectAttachments();

if (contextAttachments != null && contextAttachments.size() != 0) {

((RpcInvocation) invocation).addObjectAttachments(contextAttachments);

}

List<Invoker<T>> invokers = list(invocation);

LoadBalance loadbalance = initLoadBalance(invokers, invocation);

RpcUtils.attachInvocationIdIfAsync(getUrl(), invocation);

return doInvoke(invocation, invokers, loadbalance);

}

 

 

 

 

 

  可以实现权重重写,但是目前还未能拿到nacos配置的权重

二、dubbo-admin客户端(需要nacos注册方式)

自己尝试不太好用,放弃调了

遗留问题:两种方案都未实现dubbo RPC调用负载权重动态配置问题

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值