可以在多线程环境中使用单个 QueueConnection 吗?
Posted
技术标签:
【中文标题】可以在多线程环境中使用单个 QueueConnection 吗?【英文标题】:Can a single QueueConnection be used in multithreaded environment.? 【发布时间】:2015-10-28 23:03:48 【问题描述】:我有一个在 IBM WAS 中配置的 IBM QM。单个 QueueConnection 从 QCF 创建并加载到内存中,以便多个线程可以访问同一个连接(每个线程将在此连接中创建一个会话)来发送和接收来自队列的消息. 这种方法存在性能问题。
-
当第一个线程正在使用连接时,其他线程会等待吗
直到第一次发送和接收。?
如果是这种情况,我可以为每个线程创建一个连接吗?这会影响性能吗?
我有一个应用程序,其中并发请求数为每秒 50 个。所以我必须处理性能问题。
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:JMS 连接(即 QueueConnections 和 TopicConnections)是线程安全的,可以被多个线程使用。 所有 JMS 构造“低于”连接(即 Sessions、QueueSessions、TopicSessions)都不是,应该为每个线程分配一个。
【讨论】:
由于所有线程使用相同的连接,一个线程的session.send(msg)会影响其他线程吗?即其他线程会等到一个线程完成其发送/接收操作吗? 谢谢。我会尝试做一个负载测试并弄清楚。【参考方案2】:每个线程应该共享一个QueueConnectionFactory 而不是一个QueueConnection。
然后线程将从工厂创建自己的 QueueConnection。
【讨论】:
我有 200 毫秒的时间来发送和接收消息。从 QCF 获取新连接会影响线程的性能吗? 发送和接收是什么意思?你期待什么回来? 我有一个外部系统,它处理请求队列上的消息并在响应队列上发送响应消息。 (我没有使用 MDB)以上是关于可以在多线程环境中使用单个 QueueConnection 吗?的主要内容,如果未能解决你的问题,请参考以下文章
在多线程环境中使用 std::string 时 Clang 的线程清理器警告