1

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

4

2 回答 2

1

FIFO 也用于主题。这不是队列和主题之间的区别。

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

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

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

于 2013-01-03T16:05:27.050 回答
0

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

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

于 2013-01-03T16:31:42.430 回答