【发布时间】:2014-10-08 19:50:49
【问题描述】:
我需要从 Q 中消费,并在每条消息上标记一个序列键以指示排序。即消费需要是顺序的。从性能/吞吐量的角度来看,我会更好地使用阻塞接收()方法,还是在 onMessage() 方法上使用单线程配置的异步侦听器?
谢谢。
【问题讨论】:
标签: performance queue jms consumer
我需要从 Q 中消费,并在每条消息上标记一个序列键以指示排序。即消费需要是顺序的。从性能/吞吐量的角度来看,我会更好地使用阻塞接收()方法,还是在 onMessage() 方法上使用单线程配置的异步侦听器?
谢谢。
【问题讨论】:
标签: performance queue jms consumer
有很多方面会影响性能和吞吐量;用纯粹的 JMS 术语来说,实际上不可能说获取消息的同步或异步模型会降低或提高效率。这将取决于许多因素,包括应用程序的编写方式、应用程序使用的其他资源、您选择的消息传递提供程序的实现以及其他因素,例如机器性能以及客户端和服务器机器的配置。
本次讨论, Single vs Multi-threaded JMS Producer,涵盖了其中一些主题。
对于序列,如果您是单线程的,则 JMS 规范对消息顺序提供了一些保证;最好查看规范,看看它是否符合您的总体要求。
通常人们会在消息生成时插入一个应用序列号;因此,消费者可以检查他们是否按顺序获得了正确的消息。在消费时添加序列号不会特别帮助该消费者。
请记住,对消息排序的要求越严格,整个架构的限制就越大,实现水平可扩展性的难度就越大。
【讨论】: