在Jgroups中拒绝邮件时会发生什么?

时间:2015-07-01 10:57:33

标签: java threadpool 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 GT;有谁知道JGroups中的消息缓冲在哪里 2 - ;任何人都可以准确地解释当我们使用abort rejection_policy时到底发生了什么?

1 个答案:

答案 0 :(得分:0)

1)消息存储在UNICASTx或pbcast.NAKACKx协议中,直到确认所有收件人都收到这些消息为止。

2)在JGroups中,存在非平凡的线程模型。消息在接收线程中从网络读取,然后传递给三个线程池(常规,OOB和内部)之一,以便在堆栈和应用程序交付中进行处理。当线程池忙并且没有配置队列/队列已满时,线程池将拒绝该作业,该消息将在接收方被丢弃。幸运的是,它将在以后重新发布。您可以使用JMX或probe.sh监视TP.num_rejected_messages上被拒绝消息的数量。