dubbo @Reference 直连报错

Created on 3 Aug 2019  ·  12Comments  ·  Source: apache/dubbo

Environment

  • Dubbo version: dubbo 2.7.3
  • Operating System version: window 10 + idea
  • Java version: jdk 1.8

1、Provider application.yml

dubbo:
  application:
    name: dubbo-consumer-demo
    qosEnable: true
    qosPort: 22222
    qosAcceptForeignIp: false
  protocol:
    name: dubbo
    port: 20880

2、Consumer application.yml

dubbo:
  application:
    name: dubbo-consumer-demo
    qosEnable: true
    qosPort: 33333
    qosAcceptForeignIp: false
  protocol:
    name: dubbo
    port: 20880

3、Provider Service

@Service(timeout = 30000, version ="1.0.0")
public class HelloProviderImpl implements HelloProvider {
  //TODO ...
}

4、Consumer Controller

````
@RestController
public class DemoController {

@Reference(version ="1.0.0", check = false, url = "dubbo://localhost:20880")
private HelloProvider helloProvider;

}
````

Running Exception:

org.apache.dubbo.remoting.RemotingException

org.apache.dubbo.remoting.RemotingException: org.apache.dubbo.remoting.RemotingException: Not found exported service: com.legendshop.NacosApi.HelloProvider:20880 in [com.legendshop.NacosApi.HelloProvider:1.0.0:20880, g2/com.legendshop.NacosApi.HelloProvider:1.0.0:20880, g1/com.legendshop.NacosApi.HelloProvider2:1.0.0:20880], may be version or group mismatch , channel: consumer: /50.50.9.24:1918 --> provider: /50.50.9.24:20880, message:RpcInvocation [methodName=hello, parameterTypes=[class java.lang.String], arguments=[null], attachments={path=com.legendshop.NacosApi.HelloProvider, input=202, dubbo=2.0.2, interface=com.legendshop.NacosApi.HelloProvider, version=0.0.0}]
org.apache.dubbo.remoting.RemotingException: Not found exported service: com.legendshop.NacosApi.HelloProvider:20880 in [com.legendshop.NacosApi.HelloProvider:1.0.0:20880, g2/com.legendshop.NacosApi.HelloProvider:1.0.0:20880, g1/com.legendshop.NacosApi.HelloProvider2:1.0.0:20880], may be version or group mismatch , channel: consumer: /50.50.9.24:1918 --> provider: /50.50.9.24:20880, message:RpcInvocation [methodName=hello, parameterTypes=[class java.lang.String], arguments=[null], attachments={path=com.legendshop.NacosApi.HelloProvider, input=202, dubbo=2.0.2, interface=com.legendshop.NacosApi.HelloProvider, version=0.0.0}]
    at org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol.getInvoker(DubboProtocol.java:266)
    at org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:127)
    at org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:102)
    at org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:193)
    at org.apache.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:51)
    at org.apache.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:57)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

    at org.apache.dubbo.remoting.exchange.support.DefaultFuture.doReceived(DefaultFuture.java:191) ~[dubbo-2.7.3.jar:2.7.3]
    at org.apache.dubbo.remoting.exchange.support.DefaultFuture.received(DefaultFuture.java:153) ~[dubbo-2.7.3.jar:2.7.3]
    at org.apache.dubbo.remoting.exchange.support.DefaultFuture.received(DefaultFuture.java:141) ~[dubbo-2.7.3.jar:2.7.3]
    at org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleResponse(HeaderExchangeHandler.java:62) ~[dubbo-2.7.3.jar:2.7.3]
    at org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:199) ~[dubbo-2.7.3.jar:2.7.3]
    at org.apache.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:51) ~[dubbo-2.7.3.jar:2.7.3]
    at org.apache.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:57) ~[dubbo-2.7.3.jar:2.7.3]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_162]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_162]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_162]

不知道是什么问题,调试了很久,没发现原因在哪里?

Most helpful comment

这样就可以了吧
@RestController
public class DemoController {

@Reference(version ="1.0.0", check = false, url = "dubbo://localhost:20880?version=1.0.0")
private HelloProvider helloProvider;

}

2.7.3版本直连时需要把分组和版本号配置在url中,不确定是故意为之还是bug,可以看下这个方法ClusterUtils#mergeUrl

All 12 comments

@Reference没有配interface吗? 另外provider和consumer的application-name怎么是一样的?

你的consumer调用的时候attachments里面version是0.0.0。
有可能是consumer其他地方也要引用你这个HelloProvider,但是没配置具体版本号

would you mind to provider a demo to reproduce this issue?

would you mind to provider a demo to reproduce this issue?

learn demo: https://github.com/EDaoren/nacos_sample-github

你的consumer调用的时候attachments里面version是0.0.0。
有可能是consumer其他地方也要引用你这个HelloProvider,但是没配置具体版本号

我自己写的 consumer,就那一个,应该不是这个问题

@reference没有配interface吗? 另外provider和consumer的application-name怎么是一样的?

interfaceName 和 interfaceClass 我都配置过,异常都是一样的,application name 纠正过来也不行

com.edaoren.service.HelloProviderImpl
这个实现类上面 @Service 注解的 interfaceName 去掉或者指定接口的全路径名看看

I tried the official demo and it worked correctly. Would you check your configuration ?

这样就可以了吧
@RestController
public class DemoController {

@Reference(version ="1.0.0", check = false, url = "dubbo://localhost:20880?version=1.0.0")
private HelloProvider helloProvider;

}

2.7.3版本直连时需要把分组和版本号配置在url中,不确定是故意为之还是bug,可以看下这个方法ClusterUtils#mergeUrl

这样就可以了吧
@RestController
public class DemoController {

@Reference(version ="1.0.0", check = false, url = "dubbo://localhost:20880?version=1.0.0")
private HelloProvider helloProvider;

}

2.7.3版本直连时需要把分组和版本号配置在url中,不确定是故意为之还是bug,可以看下这个方法ClusterUtils#mergeUrl

感谢,你是对的,加上就没有什么问题了

问题解决了,关闭了

可能和这个有关系:https://github.com/apache/dubbo/pull/4787 已经修复了

Was this page helpful?
0 / 5 - 0 ratings