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