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 来实现,那么我认为最简单直接的方法是:
- 为您 XML 中的每个条目向队列发送一条消息;称之为
workQueue
.
- 消费者(或消费者池,它可以是 MDB)将从
workQueue
获取消息并处理它们
- 一旦消费者处理完一条消息,它就会在另一个队列中放置一条消息,表明它已完成;称之为
resultsQueue
.
- 原始发件人可以收听
resultsQueue
并向客户端更新哪些条目已被处理(或未被处理)。
每个 XML 条目一个 JMS 消息非常细化,因此如果您发现性能不符合您的要求,您可能希望将多个 XML 条目一起批处理到单个 JMS 消息中以提高吞吐量要求。
我遇到以下情况,我收到一个 XML,其中包含 100,000 多个条目。对于每个项目,我必须同时处理消息,一旦 batch/bulk 完成,我必须通知客户端我处理了它发送的 100,000 个条目。我正在考虑在 Message Driven Bean 中添加每条消息以同时处理每条消息。我的问题是我如何知道 MDB 处理了这批中的所有消息,并向我发送一个信号表明这 batch/XML 中的所有消息都已完成?在 Java Message Queue 中执行此操作的最佳方法是什么?我想在处理此 XML 中的所有消息时收到通知,以便我可以通知客户。
有多种方法可以实现,但如果您想通过 JMS 来实现,那么我认为最简单直接的方法是:
- 为您 XML 中的每个条目向队列发送一条消息;称之为
workQueue
. - 消费者(或消费者池,它可以是 MDB)将从
workQueue
获取消息并处理它们 - 一旦消费者处理完一条消息,它就会在另一个队列中放置一条消息,表明它已完成;称之为
resultsQueue
. - 原始发件人可以收听
resultsQueue
并向客户端更新哪些条目已被处理(或未被处理)。
每个 XML 条目一个 JMS 消息非常细化,因此如果您发现性能不符合您的要求,您可能希望将多个 XML 条目一起批处理到单个 JMS 消息中以提高吞吐量要求。