dubbo 报错

一: 本身遇到问题---->

1. Caused by: java.lang.reflect.MalformedParameterizedTypeExceptionhtml

启动时报错,缘由是dubbo 依赖 spring 2.5.6.SEC03,而我项目中有用spring 3.2.4.RELEASE,因此致使冲突。 在maven中把dubbo中的spring依赖去除就能够了。java

若是大家项目中也报这个错,极可能也是由于jar包冲突形成的web

1
2
3
4
5
6
7
8
9
10
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>dubbo</artifactId>
     <exclusions> 
         <exclusion> 
             <artifactId>spring</artifactId> 
             <groupId>org.springframework</groupId> 
         </exclusion> 
     </exclusions> 
</dependency>

2. Caused by: java.lang.IllegalStateException: Context namespace element 'annotation-config' and its parser class [org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser] are only available on JDK 1.5 and higherspring

at org.springframework.context.config.ContextNamespaceHandler$1.parse(ContextNamespaceHandler.java:65)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:69)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1297)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1287)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
... 22 more数据库

错误缘由:http://stackoverflow.com/questions/23813369/spring-java-error-namespace-element-annotation-config-on-jdk-1-5-and-highapache

由于使用了 jdk1.8, 而dubbo 依赖 Spring 2.5 ,而Spring2.5仅仅支持 jdk1.5 到 jdk 1.7, 因此jdk 1.8 不被识别,因此报错。tomcat

3. Caused by: org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 46; cvc-complex-type.2.4.c: 通配符的匹配很全面, 但没法找到元素 'dubbo:application' 的声明。服务器

该错误是由于没有引入 dubbo jar包。加上依赖就好了:网络

1
2
3
4
5
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>dubbo</artifactId>
     <exclusions> 
</dependency>

4. Unsupported major.minor version 52.0 (unable to load classapp

出现该错误是因为class编译器的JDK版本高于运行期的JDK版本。

好比我在运行Tomcat servlet时出现该错误,是因为tomcat运行时是1.7的JDK,Eclipse编译时则是1.8 

修改方法:保证编译器和运行期的JDK版本一致。

二: 总结全部问题 ----->

 1. 若是服务注册不上怎么办?

      (1) 检查dubbo的jar包有没有在classpath中,以及有没有重复的jar包

      (2) 检查有没有重复的dubbo.properties配置文件

      (3) 检查暴露服务的spring配置有没有加载

  (4) 检查beanId或beanName有没有重复

  (5) 查看有没有错误日志: cat ~/output/logs/webx.log

  (6) 在服务提供者机器上测试与注册中心的网络是否通: telnet 172.22.3.94 9090

  (7) 检查与注册中心的链接是否存在: netstat -anp | grep 172.22.3.94

  (8) 若是是预发布机,检查hosts文件有没有正确绑定: cat /etc/hosts

  (9) 实在不行,开启远程调试:

     – (a) 在服务器JVM参数中加入:-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=7001,server=y,suspend=y 注意线上只有7001和8080能够被线下访问,调试端口需用这两个之一,因注册是启动时行为,启动时必需挂起suspend=y

    – (b) 在dubbo源码的DefaultRegistryService的registerService()方法中设置断点。

      – (c) 在Eclipse的Debug按钮下拉菜单Debug Configurations中的Remote Java Applications中新增远程调试,并设置IP和端口,以及增长dubbo的源码,进行远程Debug调试。

2. 出现RpcException: No provider available for remote service异常怎么办?

  表示没有可用的服务提供者,

   1. 检查链接的注册中心是否正确

   2. 到注册中心查看相应的服务提供者是否存在

  3. 检查服务提供者是否正常运行

3. 出现调用超时com.alibaba.dubbo.remoting.TimeoutException异常怎么办?

  一般是业务处理太慢,可在服务提供方执行:jstack PID > jstack.log 分析线程都卡在哪一个方法调用上,这里就是慢的缘由。 若是不能调优性能,请将timeout设大。

4. 出现hessian序列化失败com.caucho.hessian.client.HessianRuntimeException怎么办?

  1. 检查服务方法的传入传出参数是否实现Serializable接口 2. 检查服务方法的传入传出参数是否继承了Number,Date,ArrayList,HashMap等hessian特殊化处理的类

5. 出现Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://repo.alibaba-inc.com/schema/dubbo]怎么办?

    表示spring找不到<dubbo:...>配置的解析处理器。 一般是Dubbo的jar没有引入,请加入对Dubbo的依赖,或者是ClassLoader隔离,看是否有使用osgi或其它热加载机制。

6. 出现"消息发送失败"异常怎么办?

   一般是接口方法的传入传出参数未实现Serializable接口。

7. 出现org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'异常怎么办?

  表示xsd加载失败, 1. 检查spring版本,若是是spring2.0版本,由于该版本不能读取jar包内xsd,会读取外网的xsd,而线上环境一般不容许访问外网, 可修改/etc/hosts加入:(已将spring的xsd放在公司内部的maven仓库中) 10.20.133.138 repo.alibaba-inc.com www.springframework.org spring2.5.x版本不存在此问题,能够考虑升级到2.5.x版本。 2. 检查有没有使用osgi的xsd,若是用了,须要将spring-osgi.jar及其依赖包加进来

8. 项目依赖的三方库与Dubbo所依赖的版本冲突怎么办。

  好比,项目使用的spring和commons.pool与dubbo冲突, dubbo使用的是spring2.5和commons.pool1.4, 而项目中其它模块依赖的是spring2.0.1和commons.pool1.3。 1. 在Maven中,使用项目根pom.xml中的dependencyManagement版本仲裁解决: <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.external</groupId> <artifactId>sourceforge.spring</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>com.alibaba.external</groupId> <artifactId>jakarta.commons.poolg</artifactId> <version>1.3</version> </dependency> </dependencies> </dependencyManagement> 2. 在Antx中,使用项目根project.xml中版本仲裁解决: <projects name="thirdpart"> <project id="sourceforge/spring" version="2.0.1"/> <project id="jakarta/commons/pool" version="1.3"/> </projects>

9. 出现java.util.concurrent.RejectedExecutionException或者Thread pool exhausted怎么办?

  RejectedExecutionException表示线程池已经达到最大值,而且没有空闲连,拒绝执行了一些任务。 Thread pool exhausted一般是min和max不同大时,表示当前已建立的链接用完,进行了一次扩充,建立了新线程,但不影响运行。 缘由多是链接池不够用,请调整dubbo.properites中的: // 设成同样大,减小线程池收缩开销 dubbo.service.min.thread.pool.size=200 dubbo.service.max.thread.pool.size=200 配置项说明请参见:配置参考手册 若是线程池已经有200,还不够,一般是业务处理占用线程时间过长, 需优化业务,可经过运行: jstack 进程号 > jstack.txt 分析当前大多数线程都在干什么,从而分析出哪一个地方是瓶颈, 好比,若是大部分线程都在处理SQL,多是数据库链接不够,或数据源配置错误,或SQL没走索引等。

10. 出现com.alibaba.dubbo.registry.internal.rpc.exception.RpcLocalExceptionIoTargetIsNotConnected怎么办?

  1. 检查注册中心是否开启白名单功能,若是开启,当IP不在白名单列表中,注册中心将拒绝链接。 2. 检查端口是否正确,注册中心有两个端口,一个为控制台HTTP端口,用于管理员查看数据,一个为程序注册服务用的TCP端口。

11. 出现Remote server returns error: [6], Got invocation exception怎么办?

  此异常表示Dubbo框架调用服务提供者的实现方法失败,而且不是方法自己的业务异常。 一般是服务消费者和服务提供者的API签名不一致引发,或者提供方比消费方少此函数。 通常是服务增长方法,或修改了方法签名,而双方用的服务API的jar包不一致。

12. 出现Error closing connection/tbr-client java.lang.NullPointerException怎么办?

  若是服务提供者先关闭,当注册中心通知服务消费者后,服务消费者会再次关闭与服务提供者的链接, 而此时链接早已不存在,TBRemoting没有判断null,直接调用了close方法,因此会抛出空指针异常, 因为TBRemoting源码由taobao管理,暂时未解决此BUG,但不影响使用,可忽略。 Dubbo1.0.11-3之后版本已hack了taobao的代码,不存在此问题。

13. 出现org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xxxService': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: Method must not be null怎么办?

  一般是classpath下存在spring多个版本的jar包,排除掉不须要的spring包便可。

14. 出现Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'applicationName' of bean class [com.alibaba.dubbo.registry.internal.DefaultRegistryService]: Bean property 'applicationName' is not writable or has an invalid setter method.怎么办?

  出现相似的dubbo某个类的属性没有setter方法的异常,一般是classpath下有多个不一样版本的dubbo的jar包,致使配置文件与类不匹配。 能够在程序中运行下面的代码发现重复的类或jar包:(代码中的类名视具体冲突而定) Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources("com/alibaba/dubbo/registry/internal/DefaultRegistryService.class"); while (urls.hasMoreElements()) { URL url = urls.nextElement(); System.out.println(">>>>>>>>>>>>>>>>>>>>>>" + url.getFile()); }

15. 服务提供者没挂,但在注册中内心看不到怎么办?

   首先,确认服务提供者是否链接了正确的注册中心,不仅是检查配置中的注册中心地址,并且要检查实际的网络链接. 其次,看服务提供者是否很是繁忙,好比压力测试,以致于没有CPU片断向注册中心发送心跳,这种状况,减少压力,将自动恢复。

16. 出现ERROR monitor.StatLog -拒绝链接 java.net.ConnectException:拒绝链接 com.alibaba.dubbo.monitor.StatLog.sendStatData怎么办?

  监控中心不可用,发送统计信息失败,不影响调用,但将丢失统计信息。

17. 服务地址出现127.0.0.1怎么办?

  Dubbo1.0.7之后版本不存在此问题,当发现本机IP为127.0.0.1时,将遍历全部网卡查找有效IP。 以前版本处理方式: 正确配置的IP映射,Linux下为/etc/hosts,Windows下为C:/WINDOWS/system32/drivers/etc/hosts 假设:ifconfig命令行结果为10.20.130.230,hostname命令行结果为test2, 则配置为: 127.0.0.1 localhost 10.20.130.230 test2

18. 经过netstat -anp看到链接的注册中心和配置的不同怎么办?

  检查classpath下是否存在两个dubbo.properties文件: Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources("dubbo.properties"); while (urls.hasMoreElements()) { URL url = urls.nextElement(); System.out.println(">>>>>>>>>>>>>>>>>>>>>>" + url.getFile()); }

19. 客户端的异常信息里的errorcode是什么意思?

  如Remote server returns error: [6], Got invocation exception 1 — 收到消息的时候线程池拒绝处理 2 — 服务提供者端未能根据服务名找到相应服务 3 — 该服务调用时,服务提供者端不能加载参数类型对应的class 4 — 参数不能被正确的反序列化 5 — 不能正确从Class中create该调用所指示的方法 6 — 不能正确调用该方法

20. 出现expected string at 0×33 java.lang.String 怎么办?

  这是Hessian3.2.1的一个BUG,Dubbo内部使用Hessian3.2.1作序列化,升级到Dubbo1.0.14以上版本,已解决此问题。 具体缘由参见: http://pt.alibaba-inc.com/wp/experience_929/hessian-big-string-serialize-problems.html

21. 预发布环境,在本地的/etc/hosts文件做了对注册中心的绑定,为何服务仍是注册到生产环境的注册中心?

  antx.properties中配置的 dubbo.registry.address = dubbo-reg1.hst.xyi.cn.alidc.net dubbo-reg2.hst.xyi.cn.alidc.net dubbo-reg3.hst.xyi.cn.alidc.net dubbo-reg4.hst.xyi.cn.alidc.net 而/etc/hosts里的绑定以下: 172.22.14.13 dubbo-reg1.hst.xyi.cn.alidc.net dubbo-reg2.hst.xyi.cn.alidc.net 两边的不一致,致使该问题出现。 将绑定修改成:172.22.14.13 dubbo-reg1.hst.xyi.cn.alidc.net dubbo-reg2.hst.xyi.cn.alidc.net dubbo-reg3.hst.xyi.cn.alidc.net dubbo-reg4.hst.xyi.cn.alidc.net 便可! 22. 注册中心上服务是存在的,为何报找不到服务的错误?

  报错信息: Caused by: com.alibaba.dubbo.rpc.RpcException: No invoker available for remote service com.alibaba.china.album.service.IBankNewPicService:1.0.0, servers: [] 注册中心上看到的服务提供者提供的服务地址是:dubbo://172.29.61.76:55372?version=1.0.0&group=ibank&dubbo=1.0.0&application=ibank 缘由:服务提供者配置了group属性,默认的路由规则是 服务名= group/serviceName。 对这个服务,根据默认的路由规则,消费者消费的服务名应该是 ibank/com.alibaba.china.album.service.IBankNewPicService:1.0.0

23. 获取版本号出现java.lang.NullPointerException怎么办?

  java.lang.NullPointerException at com.alibaba.dubbo.classic.DubboVersion.getVersion 这个只有1.0.14和1.0.14-2存在的问题,在获取版本时静态字段初始化顺序不对,不影使用,可忽略,升级为1.0.15以上版本再也不会有该问题。

24. 以及配置中如何使用占位符?

  注:此为Spring的标准功能,仅在此提示使用方式,不属于Dubbo范畴。 使用Spring自带的PropertyPlaceholderConfigurer实现properties配置: xxx=10.20.130.230:9090 yyy=morgan <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://repo.alibaba-inc.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://repo.alibaba-inc.com/schema/dubbohttp://repo.alibaba-inc.com/schema/dubbo/dubbo-component.xsd"> <!-- 使用Spring自带的占位符替换功能 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <!-- 指定properties配置所在位置 --> <property name="location" value="classpath:xxx.properties" /> </bean> <!-- 使用${}引用配置项 --> <dubbo:registry address="${xxx}" application="${yyy}" /> </beans>

25. 使用多个进程启动服务,端口冲突怎么办?

  注:此为Spring的标准功能,仅在此提示使用方式,不属于Dubbo范畴。 使用Spring自带的PropertyPlaceholderConfigurer的SYSTEM_PROPERTIES_MODE_OVERRIDE实现经过-D参数设置端口: java -Ddubbo.service.server.port=20881 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://repo.alibaba-inc.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://repo.alibaba-inc.com/schema/dubbohttp://repo.alibaba-inc.com/schema/dubbo/dubbo-component.xsd"> <!-- 使用Spring自带的占位符替换功能 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <!-- 系统-D参数覆盖 --> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> <!-- 指定properties配置所在位置 --> <property name="location" value="classpath:xxx.properties" /> </bean> <!-- 使用${}引用配置项 --> <dubbo:provider port="${dubbo.service.server.port}" /> </beans>

26. 如何加载Spring?

  注:此为Spring的标准功能,仅在此提示使用方式,不属于Dubbo范畴。 1. 基于ClassPath加载: ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[}{"http://10.20.160.198/wiki/display/dubbo/service.xml"}); context.start(); 2. 基于文件系统加载: FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(new String[}{"http://10.20.160.198/home/xxx/service.xml"}); context.start(); 3. 基于Web容器加载:(WEB-INF/web.xml) <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd" id="appication" version="2.4"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:service.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>

27. 出现org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element怎么办?  

  一般是在用Dubbo1.0的jar包,却用了Dubbo2.0才支持的<dubbo:registry> <dubbo:application> <dubbo:provider> <dubbo:consumer>或2.0才支持的属性。

28. 出现Could not deserialize parameter instance, error is: readObject: unexpected end of file怎么办?

  一般是消费方或提供方的内存不足,致使buffer不能分配,使发送到一半的请求被中断了。 也多是网络抖动,致使传输流被中断。

29. 出现java.net.SocketException: Invalid argument: sun.nio.ch.Net.setIntOption怎么办?

  一般是Windows Vista和Windows7的JDK1.6的部分版本存在BUG: https://issues.apache.org/jira/browse/DIRMINA-379 能够换换JDK版本试试。

相关文章
相关标签/搜索