dubbo使用过程遇到的问题

一、java.lang.IllegalStateException: Failed to check the status of the service xxx.xx. No provider available for the service xxx

问题:找不到服务提供者
原因:提供者service加了版本号,消费者在调的时候,没加版本号。

@Service(version = "1.0.0")
@Reference //一开始直接这么写,报了上面那个错
// @Reference(version="1.0.0") 这是对的

二、org.jboss.netty.channel.ConnectTimeoutException: connection timed out: /xxx.xx.xx.xxx:xxxx

问题:连不上
原因:xxx.xxx.xx.xxx 是内网ip, 本地无法链接
分析:
首先,确认提供者是否真的注册成功了。
使用dubbo admin 查看消费者和提供者的信息
(dubbo admin 安装,去这里,下载源码 https://github.com/dangdangdotcom/dubbox 进dubbo-admin项目,打个war包,到服务器tomcat下,启动就行。默认账号密码都是root)
dubbo-admin打包的时候出过错,打包失败,是由于maven插件没装,直接在根项目(我是在根项目执行打包命令)的pom下,加上maven插件的配置。

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-source-plugin</artifactId>
	<version>2.1.2</version>
</plugin>

在dubbo admin上,可以看到服务提供者注册成功了,但是ip是内网ip,所以消费者在连的时候,也用的内网ip,所以链接超时。

解决:
/etc/hosts文件,最后一行加上

外网ip+空格+主机名
例如
123.123.123.123 xxxx

主机名查看

#直接输入hostname命令查看
hostname

重启zookeeper

重启提供者服务,这时候去dubbo admin上看,就发现注册的是外网ip了。

在此期间,还遇到过
org.jboss.netty.channel.ChannelException: Failed to bind to: /xxx.xx.xxx.xxx:xxx
这个问题是我试图使用spring.dubbo.protocol.host=xxx.xx.xxx.xxx来指定公网ip,并且hosts还未修改的时候出现的。解决还是修改hosts文件,然后重启zookeeper,重启项目。


三、java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy

四、java.lang.NoClassDefFoundError: org/apache/curator/framework/recipes/cache/TreeCacheListener

原因:问题三四都是curator-framework的版本太低导致的

解决:在pom文件加上依赖:

 <dependency>
     <groupId>org.apache.curator</groupId>
     <artifactId>curator-framework</artifactId>
     <version>5.1.0</version>
 </dependency>

注意:不一定是5.1.0 看dubbo的版本。本人在遇到问题3的时候,将这个依赖改成了4.0.1,出现问题四,改成5.1.0后解决。 大家遇到同样的问题可以改版本试试,一般改成最新的可以。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值