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