欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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&timestamp=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标签要标注在接口上,而不是标注在实现类上,客户端是根据接口类进行解析的。
相关标签: dubbo rest