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版本試試。