dubbo rest 服务学习笔记(三)【原创】

在配置过程中遇到两个问题:
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标签要标注在接口上,而不是标注在实现类上,客户端是根据接口类进行解析的。

猜你喜欢

转载自zhenggm.iteye.com/blog/2323611