【问题标题】:Batch Message Consumption for JMSItemReader-Spring BatchJMSItemReader-Spring Batch的批量消息消费
【发布时间】:2021-06-23 00:12:48
【问题描述】:

我正在开发一个 POC,其要求是从 JMS 队列中批量消费消息,并按照 Spring 批处理步骤将其传递给链中的处理器和写入器。Spring Batch 提供 JMSItemReader 作为开箱即用功能,但看起来它会一个接一个地消耗消息,直到队列中没有消息或达到接收器超时...就基于块的步骤而言,项目被读入块中,然后在事务中处理并写入为一个块到另一个数据存储区..这里JMSItemReader 不会批量读取项目..Spring Batch 世界中是否有任何解决方案可以从队列中批量消费消息以提高应用程序的整体性能?

我尝试了很多文档,但没有找到任何适合此用例的解决方案..感谢您的帮助..谢谢

【问题讨论】:

  • 值得注意的是,JMS API 本身仅支持通过事务进行“批处理”。 API 仅支持单独发送和消费消息,事务可用于确保这些操作以原子方式提交或回滚。此外,询问您的情况是否可以提高性能就像问“一根绳子有多长”。答案当然是“视情况而定”,这些问题在 Stack Overflow 上是题外话,因为它们会引发讨论,而不是基于事实的答案。

标签: java jms spring-batch batch-processing solace


【解决方案1】:

我相信BatchMessageListenerContainer 是您正在寻找的。它允许您批量阅读消息。

请注意,这不是读者/作者标准库的一部分,但您可以按原样使用它,或者根据需要获得灵感并进行调整。

【讨论】:

  • 谢谢..考虑到队列上的适度实时工作负载,您认为标准 JMSItemReader 是否足够高效.. 即使用 JMSItemReader 逐一读取消息的出列应用程序,使用一些转换逻辑对其进行处理& 最后在满足特定批量大小/接收器超时时累积它们,使用 ItemWriter(file/db) 将其写入单个事务
  • 是的,在这种情况下我认为 JmsItemReader 很好。
猜你喜欢
  • 2023-03-29
  • 2016-12-15
  • 2016-06-14
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
相关资源
最近更新 更多