【问题标题】:JMS Multiple threads processingJMS 多线程处理
【发布时间】:2012-06-12 03:34:31
【问题描述】:

我们有一个 Web 应用程序,它每 5 秒生成大约 3-5 个并行线程以连接到 JMS/JNDI 连接池。在创建下一批并行线程之前,我们等待第一批并行线程完成。在这个过程中,我们使用了大量的网络流量并且连接线程只是挂起。最终我们手动调用操作团队来终止连接线程以释放连接。 我想问你的问题是:

  • 显然我们做错了什么,因为我们占用了连接资源
  • 当我们在发送第二批请求之前等待并行线程响应时,这种设计是否不符合行业最佳实践?
  • 最后,对于这种情况,您有哪些选项和建议,即连接到 JMS/JMDI 连接的多个线程

感谢您的意见

【问题讨论】:

    标签: java multithreading jms jndi


    【解决方案1】:

    您需要调整连接池参数。听起来您的服务只使用了 3-5 个连接,这对我来说似乎很合理。 JMS 服务应该能够处理数千个连接。您的池的默认限制太低,或者您的 JMS 服务器配置的允许连接太少。

    您确定这是其他用户阻止的内容吗?我觉得很奇怪。

    【讨论】:

    • JNDI 池中的默认设置是 35 个并发连接。为了回答问题的第二部分,我们进行了一些诊断,以隔离此 Web 应用程序正在连接连接。
    • 也许您的应用没有正确释放连接?
    • 感谢我们确实检查了连接是否被关闭。您是否发现创建 3-5 个线程并同时访问连接池有任何问题?
    • 不。您可能会检查以确保您的连接池库是多线程安全的,但我无法想象它不会......
    • 确实看到了一些未关闭的连接。谢谢。
    【解决方案2】:

    我几乎可以肯定,您可以使用单连接工厂。只要确保正确清理/关闭会话即可。我们使用spring的SingleConnectionFactory。

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 2011-04-19
      • 2012-12-05
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 2011-09-17
      相关资源
      最近更新 更多