spider有一個配置文件spider.xml,為xml格式,spider.xml採用DTD進行管理,用於管理spider的所有特性、路由、高可用等。 配置文件支持三種不同的方式進行指定: 1、 通過環境變數指定。SPIDER_CONFIG環境變數指定spider啟動文件所在的位置。 2、 通過ja ...
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,如果多條路由具有相同的目標節點,應該在相應屬性上使用;分隔的方式進行合併。 |