在 JMS 中,主题是一个核心概念。它是发布/订阅模式的表示。
- 发布者在频道上发布他的消息
- 订阅者订阅该频道并从该频道接收消息
- 当每个订阅者都收到消息时,频道会删除该消息
MSMQ/.NET 中是否有类似的功能?
注意:发布者不应该关心有多少订阅者或订阅者。
MSMQ 没有直接的主题概念。在正常操作中,一条消息仅传递给一个接收者 - 一旦从队列中读取它,它就无法用于任何其他尝试从同一队列中读取的接收者。MSMQ 有一个触发器的概念,它以某种方式试图通过将消息传递给多个接收者来克服这个限制,但它绝对与主题不同(也不是那么容易使用)。
如果您的用例确实需要主题,您要么必须创建自己的多播“服务器”,通过 MSMQ 与订阅者和发布者通信,要么需要选择更合适的技术 - 例如Windows 的 ServiceBus、Rabbit MQ、Active MQ 等。