頻道攔截器物件

目錄

簡介

Apache Tribes 支援攔截器架構,以攔截訊息和成員資格通知。此架構允許邏輯解耦,並為一些非常有用的功能附加元件開啟途徑。

可用的攔截器

  • org.apache.catalina.tribes.group.interceptors.TcpFailureDetector
  • org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor
  • org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor
  • org.apache.catalina.tribes.group.interceptors.NonBlockingCoordinator
  • org.apache.catalina.tribes.group.interceptors.OrderInterceptor
  • org.apache.catalina.tribes.group.interceptors.SimpleCoordinator
  • org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor
  • org.apache.catalina.tribes.group.interceptors.TwoPhaseCommitInterceptor
  • org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor
  • org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor
  • org.apache.catalina.tribes.group.interceptors.GzipInterceptor
  • org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor
  • org.apache.catalina.tribes.group.interceptors.EncryptInterceptor

靜態成員資格

除了動態發現外,Apache Tribes 還支援靜態成員資格,並進行成員資格驗證。若要達成此目的,請在 org.apache.catalina.tribes.group.interceptors.TcpFailureDetector 攔截器之後新增 org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor。您可以在 StaticMembershipInterceptor 內部新增您希望擁有的靜態成員。TcpFailureDetector 會對靜態成員執行健康檢查,並監控它們是否發生崩潰,因此它們將具有與自動發現的成員相同的通知機制層級。

     <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
       <LocalMember className="org.apache.catalina.tribes.membership.StaticMember"
                  domain="staging-cluster"
                  uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1}"/>
       <Member className="org.apache.catalina.tribes.membership.StaticMember"
                  port="5678"
                  securePort="-1"
                  host="tomcat01.mydomain.com"
                  domain="staging-cluster"
                  uniqueId="{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}"/>
     </Interceptor>

屬性

共用屬性

屬性 說明
className 必填,因為沒有預設值
optionFlag 如果您希望攔截器根據訊息的選項旗標觸發某些訊息,您可以在這裡設定攔截器的旗標。預設值為 0,表示此攔截器會觸發所有訊息。

org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor 屬性

屬性 說明
domain 此攔截器接受的邏輯叢集網域。可能的值有兩種
1. 常規字串值,例如「staging-domain」或「tomcat-cluster」,將使用 ISO-8859-1 編碼轉換成位元組。
2. 字串形式的位元組陣列,例如 {216,123,12,3}
logInterval 此值表示來自不同網域的訊息記錄間隔。預設值為 100,表示每 100 則訊息記錄一次。

org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor 屬性

屬性 說明
expire 我們在記憶體中保留片段並等待其餘片段到達的時間。預設值為 60000 毫秒。
maxSize 訊息的最大大小(以位元組為單位)。如果訊息大小超過此值,此攔截器會將訊息分段並傳送。如果小於此值,此攔截器不會將訊息分段,而是傳送為一則訊息。預設值為 1024*100。

org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor 屬性

屬性 說明
optionFlag 預設且硬編碼的值為 8 (org.apache.catalina.tribes.Channel.SEND_OPTIONS_ASYNCHRONOUS)。調度器只會觸發此值,因為它是 Tribes 預先定義的。
alwaysSend 當傳送佇列已滿時應執行的行為。如果為 true(預設值),則會同步傳送訊息;如果為 false,則會擲回錯誤。
maxQueueSize 傳送佇列的大小(以位元組為單位),預設值為 1024*1024*64 (64 MiB),如果佇列已滿,則會設定傳送佇列的最大佇列大小,如果將 alwaysSend 設定為 true,則會同步傳送訊息;如果旗標為 false,則會擲回錯誤
maxThreads 此池中的最大執行緒數,預設值為 10。
maxSpareThreads 池中要保留的執行緒數,預設值為 2。
keepAliveTime 閒置執行緒終止前等待的最大毫秒數。預設值為 5000(5 秒)。

org.apache.catalina.tribes.group.interceptors.TcpFailureDetector 屬性

屬性 說明
connectTimeout 嘗試與可疑節點建立 TCP 連線時使用的逾時時間(以毫秒為單位)。預設值為 1000。
performSendTest 如果設定為 true,則會傳送測試訊息至可疑節點。預設值為 true。
performReadTest 如果設為 true,請讀取已發送測試訊息的回應。預設為 false。注意:如果 performSendTest 為 false,此屬性將不會生效。
readTestTimeout 指定在對可疑節點執行讀取測試時要使用的逾時時間(以毫秒為單位)。預設為 5000。
removeSuspectsTimeout 從 removeSuspects 中移除的最長時間(以秒為單位)。removeSuspects 的成員在 removeSuspectsTimeout 之後將自動移除。如果指定負值,則 removeSuspects 成員將永遠不會被移除,直到真正消失。如果未提供屬性,則使用 300 秒(5 分鐘)的預設值。

org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor 屬性

屬性 說明
interval 如果 useThread == true,則定義傳送 ping 訊息的間隔。預設為 1000 毫秒。
useThread 是否啟動執行緒以傳送 ping 訊息的旗標。如果設為 true,此攔截器將啟動一個本機執行緒以傳送 ping 訊息。如果設為 false,則頻道心跳將傳送 ping 訊息。預設為 false。

org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor 屬性

屬性 說明
interval 定義訊息數量中的間隔,我們將在此間隔中報告吞吐量統計資料。報告會記錄到 org.apache.juli.logging.LogFactory.getLog(ThroughputInterceptor.class) 記錄器中的 INFO 層級。預設值是每 10000 則訊息報告一次。

org.apache.catalina.tribes.group.interceptors.EncryptInterceptor 屬性

EncryptInterceptor 會將加密新增到在節點之間傳送會話資料的頻道訊息中。

如果使用 TcpFailureDetector,則 必須TcpFailureDetector 之前EncryptInterceptor 插入攔截器鏈中。這是因為在驗證叢集成員時,TcpFailureDetector 會將頻道資料直接寫入其他成員,而不會使用攔截器鏈的其餘部分,但在接收端,訊息仍會通過鏈(反向)。由於這種不對稱性,EncryptInterceptor 必須在傳送端在 TcpFailureDetector 之前 執行,而在接收端在 TcpFailureDetector 之後 執行,否則會發生訊息損毀。

屬性 說明
encryptionAlgorithm 要使用的加密演算法,包括模式和填充。請參閱 https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html 以取得可使用的標準 JCA 名稱。EncryptInterceptor 目前支援下列 區塊密碼模式:CBC、OFB、CFB 和 GCM。如果適用,金鑰長度將指定要使用的加密演算法類型(例如 AES-128 與 AES-256)。預設演算法為 AES/CBC/PKCS5Padding
encryptionKey 要與加密演算法一起使用的金鑰。金鑰應指定為演算法適當長度的十六進位編碼位元組(例如 AES-128 的 16 位元組/32 個字元/128 位元,AES-256 的 32 位元組/64 個字元/256 位元,等等)。

巢狀元件

StaticMember 屬性

LocalMember
靜態成員,為靜態叢集群組的本機成員。

屬性 說明
className 僅提供一個實作:org.apache.catalina.tribes.membership.StaticMember
port 無需設定。此屬性的值會繼承自叢集接收器設定。
securePort 無需設定。此屬性的值會繼承自叢集接收器設定。
host 無需設定。此屬性的值會繼承自叢集接收器設定。
domain 此靜態成員用於偵聽叢集訊息的邏輯叢集網域。有兩種不同的值類型
1. 一般字串值,例如「staging-domain」或「tomcat-cluster」,會使用 ISO-8859-1 編碼轉換為位元組。2. 字串形式的位元組陣列,例如 {216,123,12,3}
uniqueId 此靜態成員的通用唯一識別碼。值必須為 16 個位元組,格式如下
1. 字串形式的位元組陣列,例如 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

Member
靜態成員,新增至靜態叢集群組。

屬性 說明
className 僅提供一個實作:org.apache.catalina.tribes.membership.StaticMember
port 此靜態成員用於偵聽叢集訊息的埠
securePort 此靜態成員用於偵聽加密叢集訊息的安全埠,預設值為 -1,此值表示成員未在安全埠上偵聽
host 此靜態成員用於偵聽叢集訊息的主機 (或網路介面)。有三個不同的值類型
1. IP 位址,格式為「216.123.1.23」
2. 主機名稱,例如「tomcat01.mydomain.com」或「tomcat01」,只要能正確解析即可
3. 字串形式的位元組陣列,例如 {216,123,12,3}
domain 此靜態成員用於偵聽叢集訊息的邏輯叢集網域。有兩種不同的值類型
1. 常規字串值,例如「staging-domain」或「tomcat-cluster」,將使用 ISO-8859-1 編碼轉換成位元組。
2. 字串形式的位元組陣列,例如 {216,123,12,3}
uniqueId 此靜態成員的通用唯一識別碼。值必須為 16 個位元組,格式如下
1. 字串形式的位元組陣列,例如 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}