Batch/bulk 在 JMS 中处理

Batch/bulk processing in JMS

我遇到以下情况,我收到一个 XML,其中包含 100,000 多个条目。对于每个项目,我必须同时处理消息,一旦 batch/bulk 完成,我必须通知客户端我处理了它发送的 100,000 个条目。我正在考虑在 Message Driven Bean 中添加每条消息以同时处理每条消息。我的问题是我如何知道 MDB 处理了这批中的所有消息,并向我发送一个信号表明这 batch/XML 中的所有消息都已完成?在 Java Message Queue 中执行此操作的最佳方法是什么?我想在处理此 XML 中的所有消息时收到通知,以便我可以通知客户。

有多种方法可以实现,但如果您想通过 JMS 来实现,那么我认为最简单直接的方法是:

  1. 为您 XML 中的每个条目向队列发送一条消息;称之为 workQueue.
  2. 消费者(或消费者池,它可以是 MDB)将从 workQueue 获取消息并处理它们
  3. 一旦消费者处理完一条消息,它就会在另一个队列中放置一条消息,表明它已完成;称之为 resultsQueue.
  4. 原始发件人可以收听 resultsQueue 并向客户端更新哪些条目已被处理(或未被处理)。

每个 XML 条目一个 JMS 消息非常细化,因此如果您发现性能不符合您的要求,您可能希望将多个 XML 条目一起批处理到单个 JMS 消息中以提高吞吐量要求。