【发布时间】:2011-08-18 05:23:33
【问题描述】:
我们使用 IBM MQ6.1。并使用 IBM API 将消息发送到队列。 由于我们需要发送大量消息,想知道我们是否可以使用多线程并将消息发送到同一个队列。 有什么建议吗?
【问题讨论】:
我们使用 IBM MQ6.1。并使用 IBM API 将消息发送到队列。 由于我们需要发送大量消息,想知道我们是否可以使用多线程并将消息发送到同一个队列。 有什么建议吗?
【问题讨论】:
当然。您可以拥有内存和 CPU 允许的尽可能多的线程。如果您想看到性能改进,每个线程都需要它自己的连接句柄。如果您使用单个连接句柄,则来自多个线程的所有 GET 和 PUT 活动都通过连接句柄同步。如果您使用许多连接句柄,则 GET 和 PUT 活动可以并行发生。有关详细信息,请参阅 WMQ 使用 Java 手册中的 Multithreaded programs。
只需确保将 MAXUPROCS 等 OS 内核设置设置为允许 WMQ 运行足够的线程来接收连接,并且将 MAXHANDS 和 MAXCHANNELS 等 WMQ 设置提高以适应负载。请记住,工作单元是线程范围的,因此每个线程都独立于其他线程以用于同步点 - 例如,当您在线程内发出 COMMIT 时,它只提交该特定线程放置的消息,假设它具有专用连接。队列具有DEFSOPT 的属性(默认共享选项),但这与可以激活多少输入句柄有关。即使您为独占输入打开队列,您也可以有许多线程写入它。
此外,WMQ 的 v6.x 将于 2011 年 9 月结束生命周期。现在开始计划升级到 v7 以继续使用受支持的版本。如果您使用 WMQ 客户端连接,请升级客户端以及 QMgr。 v7 客户端可以与 v6 QMgr 一起正常工作,并且可以独立升级。当然,当与 v6.x QMgr 一起使用时,它仅支持 v6 功能。您可以将 v7 客户端下载为SupportPac MQC7。
【讨论】: