我最近阅读了很多关于 JMS、Spring(和 TIBCO EMS)关于连接、 session 、消费者和生产者的最佳实践
在 Spring 世界中工作时,流行的智慧似乎是
AbstractMessageListenerContainer
有许多消费者/线程。 CachingConnectionFactory
在 JmsTemplate
下方维护与代理的单个连接,然后缓存 session 和生产者。 对于生产/发布,这就是我的(大型)服务器应用程序现在正在做的事情,以前它正在为它正在发布的每条消息(坏!)创建一个新的连接/ session /生产者,因为使用了原始连接工厂下
JmsTemplate
.旧的行为有时会导致在高峰期的短时间内在代理上创建和关闭 1,000 个连接,甚至因此达到套接字/文件句柄限制。但是,当切换到此模型时,我无法理解使用单个 TCP 连接到代理的性能限制/注意事项是什么。我了解 JMS 提供程序应确保它可以以多线程方式等方式使用 - 但从实际角度来看
假设我在正确的轨道上
将不胜感激任何想法或指针,以了解更多关于该主题的阅读或与其他经纪人的经验。
最佳答案
在考虑瓶颈时,请记住两个事实:
我自己的经验是多连接总是输出执行单连接。在有损网络的情况下,使用多个连接绝对是必须的。在最佳网络条件下,多连接时,单个客户端几乎可以使客户端和服务器之间的网络带宽饱和。
也就是说,这实际上取决于您的客户的性能要求,良好网络下的单个连接已经可以提供足够好的性能。
关于multithreading - 具有多个生产 session 的单个 JMS 连接何时开始成为瓶颈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25699774/