消息存储在主题中

时间:2013-01-03 12:31:46

标签: java-ee jms jms-topic

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

2 个答案:

答案 0 :(得分:0)

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

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

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

对于本次讨论,我忽略了持久的主题订阅。这是主题订阅者的一个转折,如果消息发送时没有收听消息,那么该消费者的消息不会被删除。

答案 1 :(得分:0)

JMS在消息排序方面没有区分队列和主题。但请注意,在每种情况下,消息传递都不是FIFO。规范声明:JMS定义会话发送到目的地的消息必须按发送顺序接收(参见http://docs.oracle.com/cd/E19957-01/816-5904-10/816-5904-10.pdf - 章4.4.10)但有一些限制,例如使用不同的传送模式或不同的优先事项。

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