dubbo rest 服务学习笔记(三)【原创】
程序员文章站
2022-06-13 19:41:36
...
在配置过程中遇到两个问题:
1. 报错: object is not an instance of declaring class
这是因为接口类没有暴露方法,导致服务没有实例化
2. 报错:java.lang.RuntimeException: You must use at least one, but no more than one http method annotation on
这就是一开始没有把rest相关的annotation写到接口上,导致采用dubbo客户端访问的时候报错。
3. 报错:java.lang.IllegalStateException: urls to invokers error .invokerUrls.size :1, invoker.size :0.
在dubbo-admin控制台中禁用服务后, 客户端调用提示这个错误. 对服务禁用后只会影响dubbo客户端访问,不会影响普通的http访问。
4. 报错:Failed to invoke the method search in the service cn.gov.zjport.dubborest.service.rest.RestDemoService. No provider available for the service
在dubbo-admin控制台中禁用消费端后, 客户端调用提示这个错误.
5. 提示:main INFO wrapper.MockClusterInvoker: [DUBBO] force-mock: search force-mock enabled , url : zookeeper://192.168.3.140:2181/com.alibaba.dubbo.registry.RegistryService?anyhost=true&application=dubborest-test-consumer&check=false&connections=100&dubbo=2.8.4-SNAPSHOT&extension=com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter&generic=false&interface=cn.gov.zjport.dubborest.service.rest.RestDemoService&methods=post,get,search&mock=force%3Areturn+null&organization=zjport&owner=zhenggm&pid=11280&server=servlet&side=consumer&timeout=2000×tamp=1473471180383&validation=true, dubbo version: 2.8.4-SNAPSHOT, current host: 192.168.180.15
null
在dubbo-admin控制台中屏蔽消费端后,不进行远程调用直接返回null,客户端调用提示这个信息.
6. 报错:zookeeper connect timeout 5000
zookeeper客户端版本与服务端不一致,替换zookeeper客户端zookeeper.jar
7. 报 protocol not support rest
这是传统rest调用方式改为dubbo客户端方式时发生的,主要是因为客户端缺少rest相关包,将javax.ws.rs-api 等包放上就可以了。
8. rest 客户端调用乱码
将服务端的@Produces 中加入charset=utf-8"
9.服务端启动报错:java.lang.NoSuchMethodError: javax.ws.rs.ClientErrorException.validate
这是因为类包冲突,经过反编译发现, ClientErrorException继承自WebApplicationException, 而工程中有好几个WebApplicationException来自不同的jar包,其中个别WebApplicationException是没有validate方法的。在我的工程中是因为项目中依赖的不必要的jersey的包,与dubbo使用的resteasy包冲突,将jersey的包删除即可。
10.dubbo暴露的rest服务接口类中方法都必须带上annotation,不能把不暴露的方法放在暴露的服务接口中,否则客户端启动会提示urls to invokers error .invokerUrls.size :1, invoker.size :0.
11.部署在linux服务器上,服务自注册的地址与服务器地址不一致。
可能是hosts ip设置错误,可检查/etc/sysconfig/network 中的HOSTNAME 与 /etc/hosts对应的${HOSTNAME}对应的ip地址是否为正确的地址。
12. 客户端连不上服务,connect time out.
有可能是集成外部的应用服务器如tomcat,但是发布的dubbo服务端口与tomcat端口不一致,应修改dubbo 服务端口
13. 使用rest协议时,客户端提示找不到服务,使用dubbo协议又是好的
注意rest相关的annotation标签要标注在接口上,而不是标注在实现类上,客户端是根据接口类进行解析的。
1. 报错: object is not an instance of declaring class
这是因为接口类没有暴露方法,导致服务没有实例化
2. 报错:java.lang.RuntimeException: You must use at least one, but no more than one http method annotation on
这就是一开始没有把rest相关的annotation写到接口上,导致采用dubbo客户端访问的时候报错。
3. 报错:java.lang.IllegalStateException: urls to invokers error .invokerUrls.size :1, invoker.size :0.
在dubbo-admin控制台中禁用服务后, 客户端调用提示这个错误. 对服务禁用后只会影响dubbo客户端访问,不会影响普通的http访问。
4. 报错:Failed to invoke the method search in the service cn.gov.zjport.dubborest.service.rest.RestDemoService. No provider available for the service
在dubbo-admin控制台中禁用消费端后, 客户端调用提示这个错误.
5. 提示:main INFO wrapper.MockClusterInvoker: [DUBBO] force-mock: search force-mock enabled , url : zookeeper://192.168.3.140:2181/com.alibaba.dubbo.registry.RegistryService?anyhost=true&application=dubborest-test-consumer&check=false&connections=100&dubbo=2.8.4-SNAPSHOT&extension=com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter&generic=false&interface=cn.gov.zjport.dubborest.service.rest.RestDemoService&methods=post,get,search&mock=force%3Areturn+null&organization=zjport&owner=zhenggm&pid=11280&server=servlet&side=consumer&timeout=2000×tamp=1473471180383&validation=true, dubbo version: 2.8.4-SNAPSHOT, current host: 192.168.180.15
null
在dubbo-admin控制台中屏蔽消费端后,不进行远程调用直接返回null,客户端调用提示这个信息.
6. 报错:zookeeper connect timeout 5000
zookeeper客户端版本与服务端不一致,替换zookeeper客户端zookeeper.jar
7. 报 protocol not support rest
这是传统rest调用方式改为dubbo客户端方式时发生的,主要是因为客户端缺少rest相关包,将javax.ws.rs-api 等包放上就可以了。
8. rest 客户端调用乱码
将服务端的@Produces 中加入charset=utf-8"
9.服务端启动报错:java.lang.NoSuchMethodError: javax.ws.rs.ClientErrorException.validate
这是因为类包冲突,经过反编译发现, ClientErrorException继承自WebApplicationException, 而工程中有好几个WebApplicationException来自不同的jar包,其中个别WebApplicationException是没有validate方法的。在我的工程中是因为项目中依赖的不必要的jersey的包,与dubbo使用的resteasy包冲突,将jersey的包删除即可。
10.dubbo暴露的rest服务接口类中方法都必须带上annotation,不能把不暴露的方法放在暴露的服务接口中,否则客户端启动会提示urls to invokers error .invokerUrls.size :1, invoker.size :0.
11.部署在linux服务器上,服务自注册的地址与服务器地址不一致。
可能是hosts ip设置错误,可检查/etc/sysconfig/network 中的HOSTNAME 与 /etc/hosts对应的${HOSTNAME}对应的ip地址是否为正确的地址。
12. 客户端连不上服务,connect time out.
有可能是集成外部的应用服务器如tomcat,但是发布的dubbo服务端口与tomcat端口不一致,应修改dubbo 服务端口
13. 使用rest协议时,客户端提示找不到服务,使用dubbo协议又是好的
注意rest相关的annotation标签要标注在接口上,而不是标注在实现类上,客户端是根据接口类进行解析的。
下一篇: 求正则表达式。解决思路
推荐阅读
-
python网络编程学习笔记(三):socket网络服务器
-
Orleans[NET Core 3.1] 学习笔记(三)( 3 )服务端配置
-
Beginning Spring学习笔记——第11章 使用Spring开发REST风格的Web服务
-
dubbo rest 服务学习笔记(一)【原创】
-
dubbo rest 服务学习笔记(三)【原创】
-
dubbo http webservice 服务学习笔记【原创】
-
rabbitMQ学习笔记【三】-haproxy部署 原创
-
dubbo rest 服务学习笔记(二)【原创】
-
Dubbo学习笔记(三)——实现原理
-
python网络编程学习笔记(三):socket网络服务器