WebSphere MQ:批量使用消息

时间:2012-01-27 20:16:22

标签: spring jms ibm-mq

有没有办法批量使用来自WebSphere MQ队列的消息? e.g。

messages = queue.receiveBatch( BATCH_SIZE )

单一“接收”中,它会将一组消息(例如列表[消息])返回到BATCH_SIZE

我可以在交易中调用接收BATCH_SIZE次,但这不是我要找的

如果message groups可以解决它,它会是什么样子?虽然它似乎不是正确的解决方案,因为“消息组”似乎是逐个阅读消息。

1 个答案:

答案 0 :(得分:3)

没有。 WMQ具有预读,其中非持久性消息被流式传输到客户端,但即使在那里,客户端也会为每条消息执行单个GET(或等效语言)。

异步消息传递的一个属性应该是消息是原子的。消息对其他消息的任何依赖性称为亲缘关系,消息亲和性打破异步模型。 (但是每个传输都会为亲和力做出一些调整,而消息分组就是一个例子。)因此,GET是与消息具有1:1对应关系的原子工作单元。

WMQ消息可以是任意大小,最大为100MB,并且可以对大于此的消息进行分段,其中一条逻辑消息被分割为多条物理消息。在分段消息的情况下,一个GET将导致消耗多个消息,但是对于应用程序,仅返回一个逻辑消息。

WMQ频道使用批次,直到最近这些都是严格按消息计数构建的。然而,如果大小消息都经过相同的信道,则上述消息大小的可变性使得调谐信道非常困难。在WMQ的v7.1中,通道批处理现在受到消息计数或字节计数的限制,以先到者为准。消息GET批处理的任何概念都需要类似的调整功能,以防止对内存造成严重影响。还有与日志记录,队列大小等相关的其他交互。另请注意,如果一条消息失败,则必须回滚整个批处理。

如果目的是提高性能,请使用事务。在同步点下接收消息时,您可以在GET次呼叫之间将消息数量调整为COMMIT。您可以使用COMMIT间隔>大幅提升效果但是,这会超过阈值,您可以通过一些试验和错误来确定。性能报告可帮助确定适合您平台的最佳数量。这些可以从SupportPacs main page获得。查找名称为MPxx的条目。

如果消息是非持久性的,并且您可以在断开连接时丢失其中一些消息,那么您可以使用预读 - 假设您有一个现代版本的WMQ。这将消息传递到应用程序的WMQ客户端,以便在调用GET时下一条消息已经在本地缓冲区中。

顺便说一句,原帖中的链接是WMB文档。可以找到WMQ文档here

相关问题