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属性

     例:

条件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中配置提供者的标签,并使用消费者的过滤规则来选择特定标签的提供者。这对于在多个相同类型的提供者中进行选择是很有用的。

 

你可能感兴趣的:(dubbo,java)