在 Jgroups 中拒绝消息时会发生什么?
What happens when message is rejected in Jgroups?
我正在使用带分布式命令总线的 axon,它使用 Jgroups 创建集群。我发射了大约 100 条消息。
我对 tcp-gossip.xml 有以下配置:
sock_conn_timeout="300"
reaper_interval="0"
thread_pool.enabled="true"
thread_pool.min_threads="3"
thread_pool.max_threads="3"
max_bundle_timeout="10"
level="trace"
thread_pool.rejection_policy="Abort"
recv_buf_size="64K"
send_buf_size="20M"
/>
我得到一个 java.util.concurrent.RejectedExecutionException
当 运行 这个配置很明显,因为 rejection_policy 被中止了。但是被拒绝的消息会被再次拾取并执行,并且执行顺序也会保留。这意味着消息保存在缓冲区的某个地方。
1> 有谁知道JGroups中缓存的消息在哪里。
2> 谁能准确解释当我们使用 abort rejection_policy 时到底发生了什么?
1) 消息存储在 UNICASTx 或 pbcast.NAKACKx 协议中,直到所有收件人确认收到这些消息。
2) 在JGroups 中,有非平凡的线程模型。消息在接收线程中从网络读取,然后传递到三个线程池(常规、OOB 和内部)之一,以在堆栈和应用程序交付中进行处理。当线程池繁忙且没有队列 configured/queue 已满时,线程池将拒绝作业,消息将在接收方丢弃。幸运的是,它稍后会被重新发送。您可以使用 JMX 或 probe.sh.
监控 TP.num_rejected_messages 上被拒绝的消息数
我正在使用带分布式命令总线的 axon,它使用 Jgroups 创建集群。我发射了大约 100 条消息。 我对 tcp-gossip.xml 有以下配置:
sock_conn_timeout="300"
reaper_interval="0"
thread_pool.enabled="true"
thread_pool.min_threads="3"
thread_pool.max_threads="3"
max_bundle_timeout="10"
level="trace"
thread_pool.rejection_policy="Abort"
recv_buf_size="64K"
send_buf_size="20M"
/>
我得到一个 java.util.concurrent.RejectedExecutionException
当 运行 这个配置很明显,因为 rejection_policy 被中止了。但是被拒绝的消息会被再次拾取并执行,并且执行顺序也会保留。这意味着消息保存在缓冲区的某个地方。
1> 有谁知道JGroups中缓存的消息在哪里。
2> 谁能准确解释当我们使用 abort rejection_policy 时到底发生了什么?
1) 消息存储在 UNICASTx 或 pbcast.NAKACKx 协议中,直到所有收件人确认收到这些消息。
2) 在JGroups 中,有非平凡的线程模型。消息在接收线程中从网络读取,然后传递到三个线程池(常规、OOB 和内部)之一,以在堆栈和应用程序交付中进行处理。当线程池繁忙且没有队列 configured/queue 已满时,线程池将拒绝作业,消息将在接收方丢弃。幸运的是,它稍后会被重新发送。您可以使用 JMX 或 probe.sh.
监控 TP.num_rejected_messages 上被拒绝的消息数