通道拦截器对象

目录

简介

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
加密密钥 与加密算法一起使用的密钥。密钥应指定为算法的适当长度的十六进制编码字节(例如,AES-128 为 16 字节/32 个字符/128 位,AES-256 为 32 字节/64 个字符/256 位,依此类推)。

嵌套组件

StaticMember 属性

LocalMember
静态成员,是静态集群组的本地成员。

属性 说明
className 仅提供一个实现:org.apache.catalina.tribes.membership.StaticMember
端口 无需设置。此属性的值继承自集群接收器设置。
安全端口 无需设置。此属性的值继承自集群接收器设置。
主机 无需设置。此属性的值继承自集群接收器设置。
domain 此静态成员侦听集群消息的逻辑集群域。可能存在两种不同类型的值
1. 将“staging-domain”或“tomcat-cluster”等常规字符串值使用 ISO-8859-1 编码转换为字节。2. 字符串形式的字节数组,例如 {216,123,12,3}
唯一 ID 此静态成员的通用唯一 ID。值必须为以下形式的 16 个字节
1. 字符串形式的字节数组,例如 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

成员
添加到静态集群组的静态成员。

属性 说明
className 仅提供一个实现:org.apache.catalina.tribes.membership.StaticMember
端口 此静态成员侦听集群消息的端口
安全端口 此静态成员侦听加密集群消息的安全端口,默认值为 -1,此值表示成员未在安全端口上侦听
主机 此静态成员侦听集群消息的主机(或网络接口)。可能存在三种不同类型的值
1. “216.123.1.23”形式的 IP 地址
2. 只要正确解析,主机名,例如“tomcat01.mydomain.com”或“tomcat01”
3. 字符串形式的字节数组,例如 {216,123,12,3}
domain 此静态成员侦听集群消息的逻辑集群域。可能存在两种不同类型的值
1. 普通字符串值,如“staging-domain”或“tomcat-cluster”,将使用 ISO-8859-1 编码转换为字节。
2. 字符串形式的字节数组,例如 {216,123,12,3}
唯一 ID 此静态成员的通用唯一 ID。值必须为以下形式的 16 个字节
1. 字符串形式的字节数组,例如 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}