我使用带有分布式命令总线的axon,该总线使用Jgroups创建集群。我发送了大约100条信息。我有以下tcp-tragp.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> 有人能确切地解释当我们使用中止拒绝策略时会发生什么吗?
1)消息存储在UNICASTx或pbcast中。NAKACKx协议,直到确认这些协议被所有接收方接收为止。
2) 在JGroups中,有一个非平凡的线程模型。消息在接收线程中从网络中读取,然后传递到三个线程池(常规、OOB和内部)之一,以便在堆栈中进行处理和应用程序交付。当线程池繁忙且没有配置队列/队列已满时,线程池将拒绝作业,消息将在接收方丢弃。幸运的是,它稍后会被怨恨。您可以使用JMX或probe.sh.