可以在多线程环境中使用单个 QueueConnection 吗?

Posted

技术标签:

【中文标题】可以在多线程环境中使用单个 QueueConnection 吗?【英文标题】:Can a single QueueConnection be used in multithreaded environment.? 【发布时间】:2015-10-28 23:03:48 【问题描述】:

我有一个在 IBM WAS 中配置的 IBM QM。单个 QueueConnectionQCF 创建并加载到内存中,以便多个线程可以访问同一个连接(每个线程将在此连接中创建一个会话)来发送和接收来自队列的消息. 这种方法存在性能问题。

    当第一个线程正在使用连接时,其他线程会等待吗 直到第一次发送和接收。? 如果是这种情况,我可以为每个线程创建一个连接吗?这会影响性能吗?

我有一个应用程序,其中并发请求数为每秒 50 个。所以我必须处理性能问题。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

JMS 连接(即 QueueConnections 和 TopicConnections)是线程安全的,可以被多个线程使用。 所有 JMS 构造“低于”连接(即 Sessions、QueueSessions、TopicSessions)都不是,应该为每个线程分配一个。

【讨论】:

由于所有线程使用相同的连接,一个线程的session.send(msg)会影响其他线程吗?即其他线程会等到一个线程完成其发送/接收操作吗? 谢谢。我会尝试做一个负载测试并弄清楚。【参考方案2】:

每个线程应该共享一个QueueConnectionFactory 而不是一个QueueConnection。

然后线程将从工厂创建自己的 QueueConnection。

【讨论】:

我有 200 毫秒的时间来发送和接收消息。从 QCF 获取新连接会影响线程的性能吗? 发送和接收是什么意思?你期待什么回来? 我有一个外部系统,它处理请求队列上的消息并在响应队列上发送响应消息。 (我没有使用 MDB)

以上是关于可以在多线程环境中使用单个 QueueConnection 吗?的主要内容,如果未能解决你的问题,请参考以下文章

在多线程环境中使用 PyCurl 时程序消耗的内存不断增长

在多线程环境中使用 .Net UdpClient

如何保护可能在多线程或异步环境中使用的资源?

在多线程环境中使用 std::string 时 Clang 的线程清理器警告

在多线程 Rails 环境中使用 Redis 的最佳方式是啥? (彪马/Sidekiq)

如何在多线程环境中使用嵌入式 MySQL?