使用 RabbitMQ 发送消息时,您基本上有交换、队列和绑定。我已经了解他们的想法以及它们之间的关系,但我不太确定谁设置了什么。
基本上,我的应用程序中有三个场景。
场景 1:一个发布者,多个工作进程
我想要实现的是一个向队列发送消息的组件,并且应该有几个工作进程来处理该队列中的项目。这对我来说似乎很容易。设置如下:
- 交换:1 次“直接”类型的交换
- 队列:1个队列
- Binding:队列绑定到交换机
每当一条消息被发送到交换器时,它就会被传递到队列中,并且工作进程会得到它们的任务。
一切都将是耐用的。
那么谁设置了什么?在我看来:
- 生产者创建交换
- 生产者创建队列(因为当前可能没有工作进程在运行,否则如果没有队列,消息将丢失)
- 生产者将队列绑定到交换器
- 消费者只需在队列中收听
正确的?
场景 2:一个发布者,多个订阅者,易失性消息
第二种情况完全不同。基本上,这是一个 pub / sub 场景,其中每条消息都发送到每个当前正在侦听的客户端。如果客户端离线,它将不再接收消息,并且它们不会为他存储在任何地方。这意味着以下设置:
- 交换:1 次交换类型为“扇出”
- 队列:n个队列,每个消费者一个
- Binding:每个队列都需要绑定到exchange
那么谁设置了什么?在我看来:
- 生产者创建交换
- 消费者创建队列(因为它是自己的队列,生产者无法知道谁对消息感兴趣)
- 消费者为其队列创建与交换的绑定
- 消费者监听它的队列
正确的?
场景 3:一个发布者,多个订阅者,持久消息
与场景 2 基本相同,但如果消费者下线,消息不应丢失。在我看来,这不应该改变任何东西——对吧?