有没有一种方法可以批量使用来自WebSphere MQ队列的消息?例如
messages = queue.receiveBatch( BATCH_SIZE )
它将在单个“接收”中返回多达BATCH_SIZE的消息集合(例如List [Message])的位置?
(我可以在一次交易中致电接收BATCH_SIZE次,但这不是我想要的)
如果message groups可以解决问题,它将是什么样?尽管这似乎不是正确的解决方案,因为“消息组”似乎正在逐一读取消息.
异步消息传递的属性之一应该是消息是原子的.消息对其他消息的任何依赖关系称为亲和力,消息亲和力破坏了异步模型. (但是,每种传输方式都为亲和性提供了一些便利,而消息分组就是一个例子.)因此,GET是原子工作单元,与消息具有1:1的对应关系.
WMQ消息的最大大小可以为100MB,并且消息的大小可以大于将一条逻辑消息拆分为多个物理消息的大小.在分段消息的情况下,一个GET将导致消耗多条消息,但是对于该应用程序,仅返回一条逻辑消息.
WMQ通道使用批处理,直到最近这些批处理都是严格按照消息计数构造的.但是,如果大小消息都遍历相同的信道,则消息大小的上述可变性将使调谐信道极为困难.现在在WMQ v7.1中,批次以消息计数或字节计数为界,以先到者为准.消息GET批处理的任何概念都需要类似的调整功能,以防止对内存造成严重影响.还将与日志记录,队列大小等进行其他交互.还请注意,如果一条消息失败,则必须回滚整个批处理.
如果要提高性能,请使用事务.在同步点下接收消息时,您可以在两次COMMIT调用之间将消息数调整为GET.您可以使用COMMIT间隔>大大提高性能.与图1相同,但超出了您可以通过反复试验确定的阈值.性能报告可以帮助您确定适合您平台的最佳数量.这些可从SupportPacs main page开始使用.查找名称类似于MPxx的条目.
如果消息是非持久性的,并且您有能力在断开连接时丢失其中的一些消息,则可以使用预读-假设您拥有现代版本的WMQ.这会将消息流式传输到应用程序的WMQ客户端,以便在调用GET时下一条消息已在本地缓冲区中.