IAm*_*aja 13 java messaging spring activemq-classic jms
我阅读了今年UberConf的幻灯片,其中一位发言人提出Spring JMS为您的消息队列系统增加了性能开销的论点,但我没有看到任何证据支持幻灯片.发言者还说明点对点比传统的"发布 - 订阅"方法更快,因为每个消息只发送一次而不是广播给每个消费者.
我想知道是否有经验丰富的Java消息传递专家可以在这里权衡并澄清一些技术细节:
Pet*_*der 24
1)主要的,Spring JMS的开销是使用JmsTemplate来发送没有缓存机制的消息.从本质上讲,JmsTemplate将为您发送的每条消息执行以下操作:
这可以与您重复使用的手动编写的代码进行比较:
由于连接,会话和生成器的创建需要客户端和JMS提供者之间的通信,当然还有资源分配,它将为许多小消息创建相当大的开销.
您可以通过缓存JMS资源轻松解决此问题.例如,使用spring CachingConnectionFactory或ActiveMQs PooledConnectionFactory(如果您使用的是ActiveMQ,则标记此问题).
如果您在一个完整的JavaEE容器中运行,那么当您检索JNDI连接工厂时,池内/缓存通常是内置的并且是隐式的.
当使用spring Default Message Listening Container接收时,Spring中有一个薄层可能会增加很少的开销,但主要方面是您可以根据并发性等调整性能.本文非常好地解释了它.
2)
PubSub是一种使用模式,发布者不需要知道存在哪些订阅者.你不能简单地用p2p模仿它.而且,如果你想要从一个应用程序向另外十个应用程序发送相同的消息,我认为如果你想要从一个应用程序向另外十个应用程序发送相同的消息,那么发布消息比发送消息十次p2p要快.
另一方面,如果您只有一个生产者和一个消费者,请选择带有队列的P2P模式,因为它在某些方面更容易管理.P2P(队列)允许负载平衡,其中pub/sub不那么容易.
ActiveMQ还有一个混合版本VirtualDestinations - 它本质上是负载平衡的主题.
不同供应商的实际实现有所不同,但主题和队列并没有根本不同,并且应该具有相似的性能.你应该检查的是:
| 归档时间: |
|
| 查看次数: |
16391 次 |
| 最近记录: |