我试图了解使用Queue的用例。
我的理解: 队列意味着一对一。唯一的用例(如果不罕见,很少)将是:消息仅用于一次消费。
但即使在这些情况下,我也可能想要使用Topic(只是为了将来安全)。唯一需要特别注意的是使订阅持久。或者,在特殊情况下,我会使用桥接/调度机制。
如上所述,我总是(或者在大多数情况下)想要发布主题。订阅者可以是持久主题或分派队列。
请让我知道我在这里缺少什么,或者我错过了原来的意图?
答案 0 :(得分:3)
如果您根据实际示例考虑,何时使用队列的设计要求很简单:
...以及何时使用主题的示例......
你说......
但即使在这些情况下,我也可能想要使用Topic(仅仅是为了未来 安全)。我唯一需要做的额外情况是制作(每个) 订阅持久。或者,我特殊情况,我会使用桥接/ 调度员机制。
你过度设计了这个设计。确实,您可以使用主题和持久订阅者实现一次性处理,但您只能使用单个持久订阅者;当您为该主题启动另一个订阅者时,您将获得对同一消息的重复处理,更不用说,单个持久订阅者几乎不是可扩展的解决方案;它肯定会成为你系统的瓶颈。使用队列,您可以在同一队列的100个节点上部署1000个接收器,并且您仍然可以对单个消息进行一次性处理。
你说......
上面提到,我总是(或者在大多数情况下)想要发布到 话题。订阅者可以是持久主题,也可以是已发送的主题 队列(或多个)。
将调度队列与主题订阅者一起使用有点多余。在使用队列时,你基本上可以进行异步调度,那么为什么不使用队列?...没有理由在它前面放置一个主题。
答案 1 :(得分:0)
您可能错过了两个队列和主题都可以拥有多个订阅者。队列会将消息传递给潜在的许多订户之一,而主题会将消息传递给所有订阅者。
如果您确实只有一个订阅者,那么队列订阅者和持久主题订阅者的行为将类似。我宁愿把这种情况视为“特殊情况”。
答案 2 :(得分:0)
JMS中的队列和主题代表两种不同的模型 - 点对点和发布/订阅。主题将保留消息,直到所有客户端都收到它们,所有订阅者都处理它们。队列将等待第一个消费者提取消息,并考虑在那时读取消息。