日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DUBBO 使用问题记录

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DUBBO 使用问题记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

官方ISSUE參考

https://github.com/alibaba/dubbo/issues

?

注冊中心ZookeeperRegistry.doSaveProperties warn

2014-10-1419:56:51WARN? [com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry.doSaveProperties(221)]? [DUBBO] Failed to save registry store file, cause: Can not loc

k the registry cache file /homearch/.dubbo/dubbo-registry-192.168.1.109.cache, ignore and retry later, maybe multi java process use the file, please config: dubbo.re

gistry.file=xxx.properties, dubbo version:2.5.3, current host:192.168.1.22

java.io.IOException: Can not lock the registry cache file /homearch/.dubbo/dubbo-registry-192.168.1.109.cache, ignore and retry later, maybe multi java process use t

he file, please config: dubbo.registry.file=xxx.properties

????????at com.alibaba.dubbo.registry.support.AbstractRegistry.doSaveProperties(AbstractRegistry.java:193)

????????at com.alibaba.dubbo.registry.support.AbstractRegistry$SaveProperties.run(AbstractRegistry.java:150)

????????at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

????????at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

????????at java.lang.Thread.run(Thread.java:744)

2014-10-1419:56:51WARN? [com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry.doSaveProperties(221)]? [DUBBO] Failed to save registry store file, cause: Can not loc

k the registry cache file /homearch/.dubbo/dubbo-registry-192.168.1.109.cache, ignore and retry later, maybe multi java process use the file, please config: dubbo.re

gistry.file=xxx.properties, dubbo version:2.5.3, current host:192.168.1.22

java.io.IOException: Can not lock the registry cache file /homearch/.dubbo/dubbo-registry-192.168.1.109.cache, ignore and retry later, maybe multi java process use t

he file, please config: dubbo.registry.file=xxx.properties

????????at com.alibaba.dubbo.registry.support.AbstractRegistry.doSaveProperties(AbstractRegistry.java:193)

????????at com.alibaba.dubbo.registry.support.AbstractRegistry$SaveProperties.run(AbstractRegistry.java:150)

????????at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

????????at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

????????at java.lang.Thread.run(Thread.java:744)

?

原因:

dubbo會默認會在本地緩存注冊中心的信息文件,默認路徑在//home/[user]/.dubbo/dubbo-registry-192.168.1.109.cache一個服務有多個應用有用到dubbo的時候更新注冊中心的本地緩存,在更新本地緩存沖突時,就報了上面的warning;

如何消除這個warn:

在dubbo.properties文件里加入; dubbo.registry.file=/home/xxx/app/dubbo-registry.propertiesPS:Dubbo將自動加載classpath根目錄下的dubbo.properties,可以通過JVM啟動參數:-Ddubbo.properties.file=/home/xxx/dubbo.properties 改變缺省配置位置。

影響:

?這個warn可以忽略,只在存儲文件的時候才報,存儲的文件在AbstractRegistry構造函數里加載;是在啟動的時候用

?

錯誤的服務提供者IP注冊到中心

?

hostname解析錯誤或者可能是使用了VPN,啟動了dubbo服務提供者應用,又連了正式環境的注冊中心;

?一旦dubbo獲取的ip錯誤后(撥了vpn 本機IP就會有多個),

?這種情況即使提供者服務停掉,目前dubbo沒有能力清除這類錯誤的提供者;

?(需要修改源碼測試,需要客戶端重新更細包,因為清除動作client端)

?這種情況同樣發生在測試的dubbo注冊中心;

??

規避方案:

  • 線上最好直接把10.10.10.10服務器的2181端口,做ip限制,VPN撥上的IP過濾掉(@旭峰,看能不能做到)
  • 團隊人員行為控制;
  • 撥VPN又需要調試dubbo提供者的應用時,指定DUBBO服務的主機綁定?
  • 發現這種情況的解決方法:

  • 到dubbo管理后臺,禁用錯誤的服務提供者;
  • Dubbo主機綁定說明:?

    ? 缺省主機IP查找順序:?

    • 通過LocalHost.getLocalHost()獲取本機地址(hostname做解析,從而獲取IP地址的,ping hostname)。
    • 如果是127.*等loopback地址,則掃描各網卡,獲取網卡IP。

    ?

    ?注冊的地址如果獲取不正確,比如需要注冊公網地址,可以:


    1. 可以在/etc/hosts中加入:機器名 公網IP,比如:?

    test1 205.182.23.201?

    2. 在dubbo.xml中加入主機地址的配置:

    <dubbo:protocol?host="205.182.23.201">

    3. 或在dubbo.properties中加入主機地址的配置:

    dubbo.protocol.host=205.182.23.201 或?JAVA_OPTIONS="-Ddubbo.protocol.host=192.168.1.111

    怎么樣一次訪問調用集群中所有節點?

    配置下消費者端即可。dubbo已經支持廣播調用《broadcast》

    <dubbo:referenceid="testservice"interface="xxx.TestService"timeout="8000"cluster="broadcast"/>

    spring jar包沖突

    我們現在用的spring是3,而dubbo引用的是2.5.6,會造成jar包沖突,需要排除

    錯誤信息:WARN:oejuc.AbstractLifeCycle:FAILED ModelViewController: java.lang.NoSuchFieldError: APPLICATION_CONTEXT_ID_PREFIX

    解決辦法:<dependency>

    ????????????<groupId>com.alibaba</groupId>

    ????????????<artifactId>dubbo</artifactId>

    ????????????<version>2.4.9</version>

    ????????????????<exclusions>

    ????????????????<exclusion>

    ????????????????????<groupId>org.springframework</groupId>

    ????????????????????<artifactId>spring</artifactId>

    ????????????????</exclusion>

    ????????????</exclusions>

    </dependency>

    異步調用問題

    ??dubbo的異步調用發現個問題

    A?-----[異步]-->????B???--[同步調用]-->C

    B同步dubbo調用C,就會直接返回null

    如果B調用C后,下一步還有同步調用D,D返回的會正確;

    ?

    ?

    服務端開發不注冊到中心

    開發調試的時候:開發的dubbo服務不要注冊到注冊中心。不注冊的方法如下,建議用1或2
    1:啟動jvm參數:-Ddubbo.registry.address=192.168.1.109:2183?register=false
    2:改properties:<dubbo:registry address="192.168.1.109:2183?register=false"/> ?

    3:dubbo.xml 配置:<dubbo:registry address="192.168.1.109:2183" register="false" />(上線要改回來)

    ?

    dubbo-monitor-simple

    ?

    里面有個配置dubbo.statistics.directory=${user.home}/monitor/statistics

    下面的監控是寫文件的,導致服務器的文件過多,幾個月下來inode都要滿了。

    定期清理,或者用dubbo-monitor-x吧,入mysql

    ?

    oschina有一個開源項目:http://git.oschina.net/handu/dubbo-monitor?

    ?

    狀態被禁用,管理后臺設置無效

    不知道什么原因,管理后臺看服務是禁用狀態,而且啟用不成功,感覺是哪里配置寫進去的地方寫錯,具體原因沒分析,

    解決方法就是去登錄zookeeper里手段刪除配置節點

    zkCli.sh -server 192.168.1.23:2183

    ?delete?/dubbo/xxxx.xxxx.Service/configurators/xxxxxxx

    ?

    DUBBO的回調問題,指導文檔是(試用)生產上慎用;

    provider <--consumer: ?正常調用

    provider -->consumer: ?回調

    例子里,消費的端配置是

    <dubbo:reference?id="callbackService"?interface="com.callback.CallbackService"?/>

    CallbackService callbackService = (CallbackService) context.getBean("callbackService");callbackService.addListener("http://10.20.160.198/wiki/display/dubbo/foo.bar", new CallbackListener(){public void changed(String msg) {System.out.println("callback1:" + msg);} });

    注意點1:初始化的時候,必須調用callbackService.addListener后,provider在調用回調服務,客戶端才能收到。

    注意點2: provider如果重啟了,consumer如果沒有重啟,這時候如果provider直接進行回調是掉不通的。

    如果你重現再consumer里再callbackService.addListener,那就可以了。

    ?

    原因跟回調實現有關,dubbo的回調暴露,CallbackServiceCodec實現consumer的接口暴露。

    1.callbackService.addListener

    2.-->CallbackServiceCodec(tcp進行callback的編碼)、并export回調服務

    3.--tcp傳輸編碼-->

    4.provider收到編碼,CallbackServiceCodec.decode解碼知道consumer有回調接口暴露,生成invoker

    5.這個時候provider就可以調用invoker了。

    ?

    所以,如果provider重啟了,內存里的callbackService 的invoker就沒有了。

    剛開始看到回調,以為能很好的解決相互依賴,實現provider對consumer的調用,

    ?

    比如場景:

    業務系統--依賴-->配置中心。

    配置中心后臺修改了配置,想下發到業務系統(廣播調用)。

    用回調有很多問題:1.上面provider重啟問題,2.回調沒有類似的廣播調用。

    這種場景大致的dubbo擴張方案(如果誰有解決方案,多謝指導):

    看了下如果通過回調機制擴展,有相當大麻煩(按目前對他的理解程度),所以比較簡單的

    1.provider發布share包時候,直接包consumer暴露成一個provider,就是讓他相互依賴。

    2.通過注冊中心zookeeper,建立監聽和通知機制(相對會破壞一點,原來的注冊中心定位)

    ?

    管理中心的服務注冊信息不同步

    重新發布服務后,發現管理中心的服務信息沒有更新,包括PID TS,以為應用沒更新。

    這類問題可以直接登錄zookeeper進行查看,

    zkCli.sh -server 192.168.1.23:2183

    ?

    擴展點自動激活

    dubbo開發文檔,自動激活,filter是從ProtocolFilterWrapper 調ExtensionLoader.getActivateExtension

    @Activate // 無條件自動激活 public class XxxFilter implements Filter {// ... }

    其實需要加上

    <span style="color:#7f9f7f">@Activate(group = {"provider","consumer"})</span>

    ExtensionLoader.getActivateExtension

    private boolean isMatchGroup(String group, String[] groups) {if (group == null || group.length() == 0) {return true;}if (groups != null && groups.length > 0) {for (String g : groups) {if (group.equals(g)) {return true;}}}return false; } boolean isMatchGroup(String group, String[] groups) {if (group == null || group.length() == 0) {return true;}if (groups != null && groups.length > 0) {for (String g : groups) {if (group.equals(g)) {return true;}}}return false; }

    ?

    廣播地址綁定失敗:Can't assign requested address mac dubbo

    <dubbo:registry address="multicast://224.5.6.7:1234"/>registry address="multicast://224.5.6.7:1234"/>

    ?

    This was caused by an IPv6 address being returned from?java.net.NetworkInterface.getDefault(). I'm on a Macbook and was using wireless -- p2p0 (used for AirDrop) was returned as the default network interface but my p2p0 only has an IPv6?ether?entry [found by running?ipconfig].

    Two solutions, both of which worked for me (I prefer the first because it works whether you are using a wired or wireless connection)

  • Start the JVM with?-Djava.net.preferIPv4Stack=true. This caused?java.net.NetworkInterface.getDefault()?to return my vboxnet0 network interface -- not sure what you'll get if you're not running a host-only VM.
  • Turn off wireless and use a wired connection
  • ?

    總結

    以上是生活随笔為你收集整理的DUBBO 使用问题记录的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。