Dubbo java.io.IOException: Can not lock the registry cache file
Junit時候,以前執行成功的用例,執行時控制檯仍然會報 dubbo 相關的錯誤:
Failed to save registry store file, cause: Can not lock the registry cache file
2016-03-22 17:16:05,493 [DubboSaveRegistryCache-thread-1] WARN com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry - [DUBBO] Failed to save registry store file, cause: Can not lock the registry cache file /Users/.dubbo/dubbo-registry-1*.9*.3*.3*.cache, ignore and retry later, maybe multi java process use the file, please config: dubbo.registry.file=xxx.properties, dubbo version: 2.5.3, current host: 1*.9*.3*.3*.
java.io.IOException: Can not lock the registry cache file /Users/.dubbo/dubbo-registry-1*.9*.3*.3*.cache, ignore and retry later, maybe multi java process use the file, please config: dubbo.registry.file=xxx.properties
at com.alibaba.dubbo.registry.support.AbstractRegistry.doSaveProperties(AbstractRegistry.java:193) ~[dubbo-2.5.3.jar:2.5.3]
at com.alibaba.dubbo.registry.support.AbstractRegistry$SaveProperties.run(AbstractRegistry.java:150) [dubbo-2.5.3.jar:2.5.3]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_79]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_79]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_79]
Dubbo在儲存服務列表時失敗,Can not lock the registry cache file /Users/.dubbo/dubbo-registry-1*.9*.3*.3*.cache,拿不到檔案鎖,無法儲存服務列表。
Dubbo通過註冊中心發現服務,發現的服務Dubbo同時也會儲存到本地快取一份,快取的好處有很多,比如不需要每次使用的時候都通過註冊中心獲取,註冊中心不可用了,不影響消費端的呼叫,因為本地快取了一份服務提供者列表。Dubbo本地快取預設採用的檔案,會根據註冊中心自動在當前使用者目錄下生成一個快取檔案,類似/home/newad/.dubbo/dubbo-registry-*.*.*.*.cache,星號表示註冊中心的IP地址,當同一臺機器上同時啟動多個程序,就會出現多個程序爭奪此檔案的寫入許可權,觖此問題的方法也很簡單,日誌裡面都說了重新配置一下這個快取檔案就可以了。
我的解決辦法是進入到目錄:/Users/.dubbo/ 下,把檔案重新命名一下,或者刪除,就可以了。
Windows環境下,也在Administrator資料夾下面.
刪除前,需要停止dubbo相關的所有服務.