发布/订阅与生产者/消费者之间的区别是什么?

54

在像Kafka、RabbitMQ、HornetQ、ActiveMQ等系统中,从消息传递的角度来看,发布/订阅(pub/sub)和生产者/消费者(prod/con)之间存在差异吗?还是它们可以互换使用?

4个回答

52

发布/订阅模式和生产者/消费者模式有所不同。

发布/订阅:订阅者订阅发布者。发布者发布的每条消息都会发送给所有订阅者,也就是说,所有订阅者都会收到相同的消息。(可以把它想象成报纸或杂志订阅。所有订阅者都会收到相同的杂志或报纸)

生产者/消费者:生产者生产的每条消息将被单个消费者消费。这是一种将工作负载分配给多个消费者的机制。(可以把它想象成超市里的几个收银台。每个顾客去一个收银台。顾客就像被生产的消息,而收银台就是消费者)


1
不同的消费者组可以从一个主题中消费相同的消息。 - Hackerman
2
@Hackerman,“消费者组”是特定于某些消息代理(如Kafka)的术语。 - Can't Tell

36

尽管发布/订阅和生产者/消费者术语都与消息传递相关,但它们是不同的,不能互换使用。

发布/订阅是一种消息传递模式,其中一条发布的信息被分发给多个接收者。生产者是消息的发送方,而消费者是消息的接收方。生产者和消费者都是发布/订阅和点对点消息传递模式的重要组成部分。

希望这有所帮助。


但它们经常可以互换使用。发布者和订阅者呢? - user432024
1
是的,发布者/订阅者和生产者/消费者可以交替使用,但不适用于 Pub/Sub 和 P2P 中。发布者/订阅者专门用于 Pub/Sub 消息传递模式,而生产者/消费者用于 P2P 消息传递模式。 - Shashi
你的想法是错误的。关键在于,在生产者/消费者模式中,当消息被消费时,不会与其他消费者一起处理。相反,在使用发布者/订阅者(观察者模式)时,消息将发送给所有订阅者。*** 因此它们不能互换使用!!! *** - Bijan

9

在生产者消费者模型中,由生产者生产的消息只会被一个消费者消费。即使有多个消费者,每条消息也只会被一个消费者所消费。当有n个消息和n个消费者时,每条消息将按照轮询算法被一个消费者所消费。

相比之下,在发布者订阅者模型中,由发布者生成的消息将被所有已订阅特定队列的订阅者所消费。发布者生成消息,而订阅者则消费消息。消息被发布到订阅队列中。


6
根据我的理解, - Prod/Consu - 生产者生产,消费者消费所生产的任务。 - Publisher/Subscriber - 发布者生产,订阅者仅在订阅了发布者后才能消费所生产的任务。
两者可以互换,但后者在架构实际应用中更有意义。仅在基于订阅协议的订阅情况下生产和发布。
谢谢。

1
这是这个问题的实际答案。发布-订阅涉及在消费之前注册订阅者。 - overexchange

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接