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注冊中心;

??

規避方案:

  1. 線上最好直接把10.10.10.10服務器的2181端口,做ip限制,VPN撥上的IP過濾掉(@旭峰,看能不能做到)
  2. 團隊人員行為控制;
  3. 撥VPN又需要調試dubbo提供者的應用時,指定DUBBO服務的主機綁定?

發現這種情況的解決方法:

  1. 到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)

  1. 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.
  2. Turn off wireless and use a wired connection

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449837.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449837.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449837.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

真格量化學習處理——幾個功能小函數

真格這周是學習使用了不少,功能算是很不錯,但在做的時候也發現了一個問題: 數據缺失:我在做回測,要求獲取每天的delta值,并從中篩選條件值時,報錯,顯示無數據。不得不使用pass,影響我的回測連貫性。 現在開始講下,我做的幾個功能函數: 算起來,挺煩的,就是各種細節…

軟件技術發展的驅動力

軟件產品的終極目標是為了實現用戶需求從而滿足人們的需要。也正是為了不斷滿足人們的需要使得軟件行業不斷向前發展。比如&#xff0c;新的算法&#xff08;MPEG-1、MPEG-2、MPEG-4、H.264、……&#xff09;等的出現都在當時為了滿足不同的需要而被發明。然而&#xff0c;人們…

The Model Driven Software Network

國外的一個模型驅動軟件開發的討論社區&#xff0c;The Model Driven Software Network這個社區討論的都是模型驅動開發相關的話題&#xff0c;雖然建立不久&#xff0c;但加入的人越來越多&#xff0c;建立群組的是Mark Dalgarno以下是一些討論: Textual v Graphical models W…

無敵簡單快速的文件服務器sgfs

前言 想要構建一個Linux文件服務器&#xff1f;看看下面幾個要求是不是你想要的&#xff1f; 1、只需要單節點部署就夠了 2、部署啟動簡單&#xff0c;下載之后&#xff0c;一鍵啟動&#xff0c;一鍵關閉 3、不需要任何其他的依賴安裝&#xff0c;而且運行時占用內存資源少 4、…

springboot多數據源配置

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 之前在介紹使用JdbcTemplate和Spring-data-jpa時&#xff0c;都使用了單數據源。在單數據源的情況下&#xff0c;Spring Boot的配置非常…

pyhon量化數據處理小細節3---日期格式轉換

不同的數據文檔&#xff0c;會獲得不同日期格式&#xff0c;常見的有str(20200101),datetime(20200101),又或者是2020-01-01&#xff0c;,2020-1-1,20-1-1&#xff0c;20-Apr_20th,2020/01/01,20/01/01等等&#xff0c;總之類型很多。因此需要我們對日期格式進行統一化。這里我…

面向對象和基于對象

面向對象大家都很熟悉&#xff0c;可是基于對象就不一定了。兩個聽起來好象是同一回事&#xff0c;而事實上它們卻千差萬別。基于對象是指&#xff1a;我們采用對象封裝技術&#xff0c;將數據和操作捆綁在一起&#xff0c;但是并沒有合理地使用多態、繼承等面向對象技術進行軟…

CSS margin 屬性簡介

CSS margin 屬性 設置外邊距的最簡單的方法就是使用 margin 屬性。 margin 屬性接受任何長度單位&#xff0c;可以是像素、英寸、毫米或 em。 margin 可以設置為 auto。更常見的做法是為外邊距設置長度值。下面的聲明在 h1 元素的各個邊上設置了 1/4 英寸寬的空白&#xff1a;h…

MVC中使用代碼創建數據庫(code first +mysql+EF)

1.新建一個mvc項目 2.安裝mysql需要的幾個文件 EntityFramework、MySql.Data&#xff08;6.9.12&#xff09;和MySql.Data.Entity &#xff08;6.9.12&#xff09; 這里有幾點要注意 1.MySql.Data和MySql.Data.Entity 版本必須一致 2.我試用了6.10的版本 要報錯 3.我測試沒有問…

github 學習使用

博主第一次使用github&#xff0c;所以會將過程全成描述歡迎使用Github注冊安裝進入倉庫&#xff0c;創建、修改、上傳文件。強制推送強制覆蓋上傳文件歡迎使用Github 注冊 直接進入github官網&#xff1a;https://github.com 點擊sigh up 進行注冊 直接填寫即可然后驗證通過…

Java中9大內置基本數據類型Class實例和數組的Class實例

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1、Java中9大內置幾本數據類型&#xff1a; 對于對象來說,可以直接使用對象.getClass()或者Class.forName(className);、類名.class都可以…

軟件質量管理之困境與對策思考

相信在不少與軟件開發相關的企業內&#xff0c;質量管理部門與軟件開發部門在日常運作中形成了如下圖所示的“啞鈴形”組織結構。 開發部門執行質量管理部門所制定的流程&#xff0c;通過提供證據的形式將各種流程執行后的數據反饋給質量管理部門&#xff08;包括缺陷率和各種流…

GDI+用PNG圖片做半透明異型窗口

{*******************************************************}{ }{ GDI用PNG圖片做半透明異型窗口 }{ }{ 版權所有 (C) 2008 QQ:…

java Spring Boot中使用Swagger2構建API文檔

1、添加Swagger2的依賴 在pom.xml中加入Swagger2的依賴 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.2.2</version> </dependency> <dependency><groupId&g…

什么是 FreeMarker

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 轉自官方文檔&#xff0c;只是記錄下官方在線手冊地址&#xff1a;http://freemarker.foofun.cn/ FreeMarker 是一款 模板引擎&#xff…

TP函數

U方法用于完成對URL地址的組裝&#xff0c;特點在于可以自動根據當前的URL模式和設置生成對應的URL地址&#xff0c;格式為&#xff1a;U(地址,參數,偽靜態,是否跳轉,顯示域名);在模板中使用U方法而不是固定寫死URL地址的好處在于&#xff0c;一旦你的環境變化或者參數設置改變…

爬蟲——————爬取中金所,深交所,上交所期權數據

先從深交所開始&#xff1a;直接上傳源碼&#xff1a; from bs4 import BeautifulSoup from lxml import etree import pandas as pd import akshare as ak import datetime import requests import csv from contextlib import closing import time from urllib.request impo…

linux下的C語言開發

linux下的C語言開發&#xff08;開篇&#xff09; 在很多人的眼里&#xff0c;C語言和linux常常是分不開的。這其中的原因很多&#xff0c;其中最重要的一部分我認為是linux本身就是C語言的杰出作品。當然&#xff0c;linux操作系統本身對C語言的支持也是相當到位的。作為一個…

sql語法學習

本人數據庫目前使用的是sql&#xff0c;主要是使用python語言&#xff0c;然后用pandas調用&#xff08;真的很方便&#xff09;。所以就總結一下&#xff0c;也為自己以后調用數據查找方便使用。 導入包 from sqlalchemy import create_engine import pymssql連接數據庫 con…

C 溫故知新 之 指針:數組指針、字符串指針、函數指針

一、數組指針 1.指向數組元素的指針 1、定義&#xff1a;還是那句話通俗的說指針就是地址   數組指針 &#xff1a;數組的起始地址 數組元素指針&#xff1a;數組元素的地址 2、定義一個指向數組元素的指針變量的方法&#xff0c;與之前介紹的指針變量相同。 例如&#…