【问题标题】:Message storing in topic消息存储在主题中
【发布时间】:2013-01-04 00:31:42
【问题描述】:

在JMS中,QUEUE的情况下,消息以FIFO的方式存储。但是Topic的情况下,消息是如何存储的??是否以 FIFO aur 任何其他方式??

【问题讨论】:

    标签: jakarta-ee jms jms-topic


    【解决方案1】:

    主题也是先进先出。这不是队列和主题之间的区别。

    队列和主题之间的最大区别在于消息传递模型:点对点与发布/订阅。

    • 队列(点对点):假设只有一个消费者会收到每条消息。如果此时没有消费者在收听,则存储消息直到有消息到达。如果 >1 个消费者,则随机选择一个消费者来获取每条消息。
    • 主题(发布/订阅):假设当前连接的所有消费者都收到发送的每条消息。对于发送的每条消息,安排所有当前连接的消费者获取一份副本。如果当前没有消费者在收听,则丢弃该消息。

    对于本次讨论,我将忽略持久主题订阅。这是主题订阅者的一个转折,如果在发送消息时它没有在监听,则不会为该消费者丢弃消息。

    【讨论】:

      【解决方案2】:

      JMS 在消息排序方面不会对队列和主题产生影响。但是请注意,消息传递并非在每种情况下都是先进先出的。规范规定:JMS 定义会话发送到目的地的消息必须按照它们发送的顺序接收(参见http://docs.oracle.com/cd/E19957-01/816-5904-10/816-5904-10.pdf - 第 4.4.10 章),但有一些限制,例如不同的传递模式或不同的优先级.

      在许多环境中,您不会发现一个会话发送的相关消息,因为您会发现多个服务器或进程的并行化 - 因此依赖消息顺序通常不是一个好主意....

      【讨论】:

        猜你喜欢
        • 2017-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-07
        • 2017-10-02
        • 2020-10-27
        • 2021-10-03
        • 2018-08-25
        相关资源
        最近更新 更多