通道拦截器对象

目录

简介

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 为节点之间携带会话数据的通道消息添加加密功能。

如果使用 TcpFailureDetectorEncryptInterceptor 必须插入到拦截器链中,并且在 TcpFailureDetector 之前。这是因为在验证集群成员时,TcpFailureDetector 会直接将通道数据写入其他成员,而无需使用拦截器链的其余部分,但在接收端,消息仍然会通过链(反向)。由于这种不对称性,EncryptInterceptor 必须在发送方在 TcpFailureDetector 之前执行,在接收方在 TcpFailureDetector 之后执行,否则将发生消息损坏。

属性描述
encryptionAlgorithm要使用的加密算法,包括模式和填充。有关可用的标准 JCA 名称,请参阅 https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html。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此静态成员的全局唯一 ID。值必须是以下形式的 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此静态成员的全局唯一 ID。值必须是以下形式的 16 字节:
1. 字符串形式的字节数组,例如 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}