dubbo升级至2.7.18版本后,客户端调用失败解决方案和原因

        因安全需要决定对dubbo进行安全升级,升级至2.7.22版本,升级过程中遇到泛化调用失败

        主要错误提示:

                

Failed to invoke the method $invoke in the service org.apache.dubbo.rpc.service.GenericService. No provider available for the service XXXXX from registry 127.0.0.1:2181 on the consumer xxxxxx using the dubbo version 2.7.18. Please check if the providers have been started and registered. 
org.apache.dubbo.rpc.RpcException: Failed to invoke the method $invoke in the service org.apache.dubbo.rpc.service.GenericService. No provider available for the service XXXXX from registry 127.0.0.1:2181 on the consumer xxxxxx using the dubbo version 2.7.18. Please check if the providers have been started and registered.
	at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.checkInvokers(AbstractClusterInvoker.java:288) ~[dubbo-2.7.18.jar:2.7.18]
	at org.apache.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:59) ~[dubbo-2.7.18.jar:2.7.18]
	at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:265) ~[dubbo-2.7.18.jar:2.7.18]
	at org.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor.intercept(ClusterInterceptor.java:47) ~[dubbo-2.7.18.jar:2.7.18]
	at org.apache.dubbo.rpc.cluster.support.wrapper.AbstractCluster$InterceptorInvokerNode.invoke(AbstractCluster.java:92) ~[dubbo-2.7.18.jar:2.7.18]
	at org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:98) ~[dubbo-2.7.18.jar:2.7.18]
	at org.apache.dubbo.registry.client.migration.MigrationInvoker.invoke(MigrationInvoker.java:170) ~[dubbo-2.7.18.jar:2.7.18]

原因: 

dubbo服务提供者注册时添加了 dubbo.provider.tag 配置 ,在dubbo2.7.18 前调用方不带 tag 是可以调用注册带 tag的服务的,2.7.18 修复了还有就是2.7.18的泛化调用过滤器GenericFilter做了修改,如果重写了过滤器可以官方的修改。

问题复现:

条件1:dubbo使用版本 大于等于2.7.18

条件2:dubbo服务提供者xml配置tag属性

     例:<dubbo:provider tag="test" />

条件3:dubbo客户端不进行 tag设置

问题解决办法:

方案一:服务提供者去除tag设置

方案二:服务消费者添加tag配置,并保持与服务提供者一样 

dubbo tag作用说明:

在Dubbo中,可以使用dubbo.provider.tag属性来配置提供者的标签。这个标签可以用于消费者过滤目标提供者。

要配置dubbo.provider.tag,可以在服务提供者的XML配置文件(例如provider.xml)中添加一个dubbo:provider元素,并在其中设置tag属性的值。以下是一个示例:

<dubbo:provider tag="test" />

在上面的示例中,标签被设置为"test"。你可以根据需要将其设置为任何你想要的值。

配置了dubbo.provider.tag后,消费者可以使用该标签来筛选可用的提供者。在消费者的XML配置文件(例如consumer.xml)中,可以使用dubbo:reference元素的filter属性来指定消费者过滤提供者的规则。以下是一个示例:

<dubbo:reference interface="com.example.SomeService" filter="tag=test" />

在上面的示例中,我们使用了filter属性并设置为tag=test,以筛选具有"test"标签的提供者。

通过这样的配置,你可以使用dubbo.provider.tag属性在Dubbo中配置提供者的标签,并使用消费者的过滤规则来选择特定标签的提供者。这对于在多个相同类型的提供者中进行选择是很有用的。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值