gpt4 book ai didi

java - JMS 主题与队列 - 意图

转载 作者:搜寻专家 更新时间:2023-10-31 20:12:42 29 4
gpt4 key购买 nike

我正在尝试了解使用队列的用例。

我的理解:队列意味着一对一。唯一的用例(如果不是罕见的话,很少)是:消息仅供一次使用。

但即使在这些情况下,我也可能想使用主题(只是为了将来安全)。唯一需要额外注意的是使订阅持久化。或者,在特殊情况下,我会使用桥接/调度程序机制。

鉴于以上,我总是(或在大多数情况下)想要发布到一个主题。订阅者可以是持久主题或调度队列。

请让我知道我在这里遗漏了什么或者我遗漏了初衷?

最佳答案

如果您根据真实示例进行思考,关于何时使用队列的设计要求很简单:

  • 提交在线订单(exactly-once 处理以避免扣款卡两次)
  • 私有(private)点对点聊天(每条消息只有一个接收者)
  • 并行任务分配(在网络系统中的许多工作人员之间分配任务)

...以及何时使用主题的示例...

  • 向多个订阅者广播新闻;通知服务、股票行情等。
  • 电子邮件客户端(独特的持久订阅者;断开连接时您仍然会收到电子邮件)

你说...

But even in those cases, I may want to use Topic (just to be future safe). The only extra case I would have to do is to make (each) subscription durable. Or, I special situations, I would use bridging / dispatcher mechanism.

您过度设计了设计。的确,您可以使用主题和持久订阅者实现恰好一次处理,但您会被限制为单个持久订阅者;在您为该主题启动另一个订阅者的那一刻,您将对同一消息进行重复处理,更不用说,单个持久订阅者几乎不是可扩展的解决方案;这肯定会成为您系统中的瓶颈。使用队列,您可以在 100 个节点上为同一个队列部署 1000 个接收器,并且您仍然可以获得对单个消息的恰好一次处理。

你说...

Give above, I would always (or in most cases) want to publish to a topic. Subscriber can be either durable topic(s) or dispatched queue(s).

使用带有主题订阅者的分派(dispatch)队列有点多余。使用队列时基本上可以异步调度,那么为什么不直接使用队列呢?...没有理由在它前面放一个主题。

关于java - JMS 主题与队列 - 意图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17429401/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com