spider 設定檔參考,spider設定檔
spider有一個設定檔spider.xml,為xml格式,spider.xml採用DTD進行管理,用於管理spider的所有特性、路由、高可用等。
設定檔支援三種不同的方式進行指定:
1、 通過環境變數指定。SPIDER_CONFIG環境變數指定spider開機檔案所在的位置。
2、 通過java系統屬性執行。java系統屬性spider.config指定spider開機檔案所在的位置。
3、 從classpath擷取。該設定檔需存放在classpath*:目錄下,spider中介軟體啟動時會自動從classpath*下搜尋第一個找到的spider.xml檔案並將其作為spider的設定檔進行初始化,由於該設定檔通常需要被修改,所以一般不放置在jar中。
三者的優先順序為先從環境變數擷取,如果能擷取到則使用SPIDER_CONFIG環境變數指定的開機檔案。如果為空白,則從java系統屬性擷取。如果還是擷取不到,則從預設的classpath*目錄下擷取。如果三個地方都擷取不到,則啟動失敗。
spider的設定檔結構如下:
<?xml version="1.0" encoding="UTF-8"?><spider> <nodeName value="client" cloud="false" role="production" serviceCenter="localhost:7070" appVersion="" charset="UTF-8" dev="true" detectInterval="60000"/> <plugins> <plugin pluginId="spider.localService" serviceTimeout="60000" zlibCompress="false" encrypt="false" anonymous="true" serviceProxyPackage="com.ld.net.spider.demo.parallel;com.ld.net.spider.manage.api;com.ld.net.spider.demo.broadcast;com.ld.net.spider.demo.bs.wx;com.ld.net.spider.demo.pl"> <server enable="false" port="17070" reliable="false" threadCount="200" serviceExportPackage="" /> </plugin> <plugin pluginId="spider.channel"> <cluster clusterName="ANB" connectionSize="10"> <workNode address="localhost" port="18051" /> </cluster> </plugin> <plugin pluginId="spider.filter"> </plugin> </plugins> <routeItems consistent="true"> <routeItem serviceId="*" clusterName="ANB" /> <!-- <routeItem serviceId="*" appVersion="" subSystemId="" systemId="" companyId="" clusterName="spider-server" /> --> </routeItems></spider>
設定檔中的所有節點元素(element)名和屬性名稱均為大小寫敏感,且採用駝峰式命名,並儘可能使用英文全稱。
設定檔的使用元素或者屬性的規範為:如果對象是特性,則作為屬性;如果對象本身是主體,則作為元素。
各節點元素(element)以及屬性的含義如下(綠色標註為已實現特性):
各節點元素(element)以及屬性的含義如下(綠色標註為已實現特性):
元素 |
屬性(--代表元素本身) |
可選 |
預設值,含義和取值範圍 |
spider |
-- |
否 |
spider設定檔根 |
nodeName |
-- |
否 |
spider節點基本資料 |
value |
否 |
Spider節點名稱,相同名稱的spider將自動組成叢集,任一字元串,用於cloud模式 |
dev |
是 |
運行模式,用於控制日誌輸出層級。true:開發模式,將輸出所有日誌資訊;false:生產模式,將自動禁止輸出debug層級的日誌。預設false。 |
cloud |
否 |
spider節點運行環境,true:運行於服務中心模式,將自動接收來自服務中心推送的下遊節點變化,適合於大規模部署;false:運行於獨立管理員模式,可通過restful api管理相關節點變化。 |
role |
是 |
spider角色,prod/nb/np:作為生產伺服器運行;sc:作為服務中心運行。預設生產伺服器。除非配置為sc,否則均表示生產伺服器。只不過只有該節點配置為np時,平行處理外掛程式才會生效,具體可見並存執行外掛程式一節。 |
serviceCenter |
否 |
服務中心地址,ip:port格式。 |
appVersion |
是 |
長度為最長為8位,建議xx.xx.xx格式,本spider節點提供的應用服務版本,用於灰階升級,任一字元串,具體參見灰階升級一節。預設””,表示非特定版本。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
charset |
否 |
全域編碼格式,UTF-8或GBK。建議整個環境要麼UTF-8,要麼GBK,盡量避免有些UTF-8,有些GBK,不然容易出錯。 |
|
slowLongTime |
是 |
慢請求執行時間,執行時間超過該長度的請求會被自動寫到本地慢日誌。預設3000毫秒。 |
|
dumpStat |
是 |
是否啟用定期dump服務效能指標到本地,true:是,每隔5分鐘會自動dump一次,該參數獨立於cloud參數;false:否。預設:true。 |
|
tcpdump |
是 |
是否啟用動態抓包和攔截。true:是;false:否。預設false。如果多個用戶端同時設定了抓相同功能號的包,則所有都會收到結果。該特性會嚴重影響效能,同時存在嚴重安全隱患,生產環境謹慎開啟。 |
|
detectInterval |
是 |
心跳活動訊號間隔時間,預設60000毫秒。 |
|
|
|
|
plugins |
-- |
否 |
spider外掛程式列表,目前的版本一共有3個外掛程式,外掛程式標識符不可修改,否則會導致spider啟動異常 |
plugin (pluginId= spider.localService) |
-- |
否 |
spdier外掛程式資訊,不同的外掛程式具有不同的屬性,spider核心引擎外掛程式,用於設定spider核心的基本特性 在netty的實現上,tcp隊列長度直接取/proc/sys/net/core/somaxconn的值,沒有提供API進行修改,故若需修改,需在OS層面修改,spider原計劃支援,後來取消 |
serviceTimeout |
是 |
服務逾時時間,可在service層級覆蓋,預設300秒,單位毫秒,正整數 |
zlibCompress |
是 |
是否啟用全域zlib壓縮請求包,true或者false,預設false。建議區域網路內不啟用,非區域網路內啟用。 |
encrypt |
是 |
是否啟用AES256加密請求包,true或者false,預設false |
serviceProxyPackage |
是 |
作為spider用戶端時要調用的遠程服務的包路徑,以;或,分隔。只要在該參數上設定了相關路徑,服務端如果在serviceExportPackage參數上設定了對應路徑,本用戶端就可以通過@Autowired注入方式調用遠程服務端對應包含提供的服務。 為了確保遠程調用的正確性,對於進行RPC調用的情況,需要確保在本節點中不包含代理類的實現,否則啟動時預設情況下Spring使用類型注入時會出現多個實現的異常,否則就需要使用Qualifier或者Resource註解。 |
|
anonymous |
是 |
伺服器是否允許無認證串連。true:允許;false:不允許。預設true。具體見安全一節。該參數在服務端設定,用戶端根據服務端的響應報文被動執行。當節點作為用戶端角色時,該參數沒有作用,也即無需設定。 |
server |
-- |
否 |
spider運行於伺服器模式時的相關資訊 |
enable |
否 |
是否啟用服務端,false代表不啟用,僅作為用戶端,true代表啟用。如果為true,則port不可為空。 |
port |
是 |
作為伺服器時的連接埠號碼,1025-63335 |
|
|
|
threadCount |
是 |
作為伺服器時業務處理線程的數量,建議為cpu核心數的20-50倍之間,預設cpu數量的20倍,一般建議不要設定 |
serviceExportPackage |
是 |
作為伺服器時自動發布的spider服務的包路徑,以;或,分隔。只要服務端在該參數上設定了相關路徑,用戶端只要在service-proxy-package參數上設定對應路徑就可以直接通過@Autowired注入方式調用本服務端包下各類提供的服務。 |
plugin (pluginId= spider. channel) |
-- |
否 |
spdier外掛程式資訊,不同的外掛程式具有不同的屬性,通道外掛程式,通道下的每個cluster代表一個伺服器叢集,由旗下的workNode組成 |
cluster |
-- |
是 |
定義下遊伺服器叢集 |
clusterName |
否 |
定義叢集的名稱,需要和下遊的伺服器定義的nodeName相同,一個設定檔中的各clusterName必須不同 |
|
|
|
reverseRegister |
是 |
標記本叢集下的節點是否為反向註冊伺服器。 |
workNode |
-- |
是 |
定義下遊伺服器叢集中的成員節點。一個cluster範圍內的workNode必須address+port唯一。 |
address |
否 |
成員節點的ip地址 |
port |
否 |
成員節點的連接埠號碼,對應於遠程節點spider.xml中plugin pluginId="spider.localService"->server定義的連接埠。 |
plugin (pluginId= spider. filter) |
filter |
是 |
過濾器外掛程式,每個filter代表一個過濾器執行個體。具體參見《1.3 流水線外掛程式》。 |
routeItems |
-- |
否 |
定義路由表的資訊。路由用來配置將不同的服務要求轉寄到相應的spider伺服器。 路由條目從上往下解析,當上面和下面的路由配置衝突時,使用上面的路由條目。 |
|
consistent |
是 |
是否啟用一致性路由策略。true:啟用,此時spider運行時會根據功能號>版本號碼>機構號>子系統號>系統號(產品系統號)的規則,對路由表進行排序,此時無論路由條目的順序如何,最終的路由目標是一致的;false:不啟用,此時spider根據定義的路由條目順序進行匹配,不同的路由條目順序可能導致不同的路由結果。預設:false。建議啟用。 |
routeItem |
-- |
否 |
定義路由條目,路由條目可以使用多個維度進行匹配以便靈活滿足各種企業系統業務情境,目前支援根據功能號、版本號碼、子系統號、系統號、機構號五個維度進行組合,其中優先順序從高到底為:功能號>版本號碼>機構號>子系統號>系統號(產品系統號)。 五個維度中,功能號、子系統號為靜態屬性,必須編譯期確定(一般來說,這兩者選一即可)。版本號碼、機構號、系統號(產品系統號)為運行時屬性,可運行時設定,主要適用於多租戶和灰階升級的情境。 其中功能號必須定義,如果匹配全部,則使用*即可,功能號與各維度均為and關係;其他均可選。沒有定義代表匹配所有,即*。 至少需要定義一個指向本地處理外掛程式的條目,最簡單為<routeItem serviceId=”*” clusterName=”spider.localService” /> 多個路由條目的順序會影響最後的路由結果,如下所示: <routeItem serviceId=”11*” appVersion=”1.0.2” clusterName=”BSNP-C00001v2” /> <routeItem serviceId=”11*;21*” companyId=”C00001” clusterName=”BSNP-C00001” /> 在上述的條目中,如果某1.0.2版本C00001機構的11xxxxxx功能到本節點,會被轉寄給BSNP-C00001v2;如果上述路由條目順序反一下,則會轉寄給BSNP-C00001。 |
serviceId |
否 |
8位ASCII字元,定義本路由條目適配的功能號,功能號支援萬用字元格式,*代表匹配全部功能,?代表匹配一個可見字元。功能號之間可以用;或,分隔。 |
appVersion |
是 |
定義本路由條目匹配的應用版本號碼,不支援通配,多個應用版本號碼之間可通過;或,分隔。 |
subSystemId |
是 |
定義本路由條目匹配的子系統號,不支援通配,多個子系統號之間可通過;或,分隔。 |
systemId |
是 |
定義本路由條目匹配的系統號,不支援通配,多個系統號之間可通過;或,分隔。 |
companyId |
是 |
定義本路由條目匹配的機構號,不支援通配,多個機構號之間可通過;或,分隔。 |
clusterName |
否 |
定義本條目中的功能將轉寄到的spider遠程伺服器。應該確保每條獨立的路由均有不同的clusterName,如果多條路由具有相同的目標節點,應該在相應屬性上使用;分隔的方式進行合并。 |