【问题标题】:JMS queue consumer: synchronous receive() or single-threaded onMessage()JMS队列消费者:同步receive()或单线程onMessage()
【发布时间】:2014-10-08 19:50:49
【问题描述】:

我需要从 Q 中消费,并在每条消息上标记一个序列键以指示排序。即消费需要是顺序的。从性能/吞吐量的角度来看,我会更好地使用阻塞接收()方法,还是在 onMessage() 方法上使用单线程配置的异步侦听器?

谢谢。

【问题讨论】:

    标签: performance queue jms consumer


    【解决方案1】:

    有很多方面会影响性能和吞吐量;用纯粹的 JMS 术语来说,实际上不可能说获取消息的同步或异步模型会降低或提高效率。这将取决于许多因素,包括应用程序的编写方式、应用程序使用的其他资源、您选择的消息传递提供程序的实现以及其他因素,例如机器性能以及客户端和服务器机器的配置。

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

    对于序列,如果您是单线程的,则 JMS 规范对消息顺序提供了一些保证;最好查看规范,看看它是否符合您的总体要求。

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

    请记住,对消息排序的要求越严格,整个架构的限制就越大,实现水平可扩展性的难度就越大。

    【讨论】:

    • 感谢您的回复。我也怀疑“很难说”是答案。至于消息排序,如果 Q 生产者放入序列键,我不必在消费者端执行任何顺序操作 - 但他们不会。我会进一步说这是消息传递和排序之间的阻抗不匹配,就像 OR 映射一样。
    • On 选项可能是让消费者查看消息的时间戳;然而,这可以被禁用,它确实取决于您对时间准确度的信任程度。但它可能会向消费者提供一些乱序的指示。
    猜你喜欢
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2013-08-08
    • 2011-10-23
    • 2015-08-03
    • 1970-01-01
    • 2021-02-18
    • 2012-07-14
    相关资源
    最近更新 更多