【问题标题】:Spring Batch Partition Jobs Configuration On WildFly 18.x / JBoss EAP 7.xWildFly 18.x / JBoss EAP 7.x 上的 Spring Batch 分区作业配置
【发布时间】:2020-05-14 13:14:53
【问题描述】:

我们在 Wildfly 集群(版本 18)或 JBoss EAP 7.x 中运行一系列 Spring Batch 分区作业。我们想对集群周围的分区进行轮询。所以outbound gate方式使用了ActiveMQ定义的activemq-ra pooled connection factory和round robin load策略。这部分似乎按预期工作。

此外,每个节点都有一个入站网关来接收分区消息。入站网关配置有 InVMConnectionfactory。目标是每个节点只处理放置在其队列中的消息。

这种方法适用于 JBoss EAP 5.x。

我们观察到入站网关的 x 个侦听器线程开始正常工作。但是,随着我们处理更多分区作业的批处理序列,处理入站消息的线程数量减少,导致消息留在队列中,分区步骤串行而不是并行运行。

这种行为甚至可以在单节点服务器上遇到,但在集群上更糟。所以看来问题出在入站网关侦听器和用于检查消息的 activeMQ 连接中。

谁能推荐如何进一步识别和解决这个问题?

谢谢

【问题讨论】:

  • 您的消费者是如何配置的?你在使用 MDB 吗?请详细说明。
  • 这是使用 Spring Batch 分区,它使用来自 Spring 集成的 JmsInboundGateway 类。我相信最终解决为 Spring DefaultMessageListenerContainer
  • 我的回答是否解决了您的评论?如果是这样,请将其标记为正确,以帮助将来有同样问题的其他用户。如果没有,请详细说明缺少什么。谢谢!

标签: spring-integration spring-batch spring-jms activemq-artemis jboss-eap-7


【解决方案1】:

听起来有些消费者正在挨饿,因为其他消费者在他们的缓冲区中持有未消费的消息。尝试在消费者使用的 URL 上设置 consumerWindowSize=0。您可以在ActiveMQ Artemis documentation 中阅读有关此设置的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2016-08-15
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多