我正在使用带有分布式命令总线的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时到底发生了什么?
答案 0 :(得分:0)
1)消息存储在UNICASTx或pbcast.NAKACKx协议中,直到确认所有收件人都收到这些消息为止。
2)在JGroups中,存在非平凡的线程模型。消息在接收线程中从网络读取,然后传递给三个线程池(常规,OOB和内部)之一,以便在堆栈和应用程序交付中进行处理。当线程池忙并且没有配置队列/队列已满时,线程池将拒绝该作业,该消息将在接收方被丢弃。幸运的是,它将在以后重新发布。您可以使用JMX或probe.sh监视TP.num_rejected_messages上被拒绝消息的数量。