首页 > 代码库 > dubbo

dubbo

转至 http://zhenggm.iteye.com/blog/2323611

 

 

在配置过程中遇到两个问题: 
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