JMS队列使用者:同步receive()或单线程onMessage()

时间:2014-10-08 19:50:49

标签: performance queue jms consumer

我需要从Q消费,并在每条消息上标记一个序列密钥以指示排序。即消费需要是连续的。从性能/吞吐量的角度来看,在onMessage()方法上使用阻塞的receive()方法或具有单线程配置的异步侦听器会更好吗?

感谢。

1 个答案:

答案 0 :(得分:1)

有许多方面会影响性能和吞吐量;在纯JMS术语中,实际上不可能声明获取消息的同步或异步模型会更低或更高效。它取决于应用程序编写方式,其使用的其他资源,所选消息提供程序的实现以及机器性能以及客户端和服务器计算机配置等其他因素的大量因素。

这个讨论, Single vs Multi-threaded JMS Producer,涵盖了其中一些主题。

对于序列,如果您是单线程,使用单个会话,JMS规范可以对消息排序提供一些保证;最好查看规范,看它是否符合您的总体要求。

人们通常会在消息生成时插入应用程序序列号;因此,消费者可以检查他们是否按顺序获得了正确的消息。在消费时添加序列号不会特别有助于该消费者。

请记住,对消息传递顺序的要求越严格,整体架构就越具有限制性,实施水平可扩展性就越困难。