使用 RabbitMQ 发送消息时,您基本上需要有交换机、队列和绑定。我理解它们的概念以及它们之间的关系,但我不太确定谁设置了什么。
基本上,我的应用程序有三种情况。
情况1:一个发布者,多个工作进程 我想要实现的是一个组件将消息发送到队列,然后会有多个工作进程处理该队列中的项目。这对我来说似乎很容易。设置如下:
交换机: 1个类型为'direct'的交换机 队列: 1个队列 绑定: 队列绑定到交换机
每当消息发送到交换机时,它将传递到队列,并且工作进程将获取其任务。
所有内容都应该是持久的。
那么谁设置了什么?在我看来:
生产者创建交换机 生产者创建队列(因为当前可能没有运行任何工作进程,如果没有队列,消息将丢失) 生产者将队列绑定到交换机 消费者只需监听队列
情况2:一个发布者,多个订阅者,易失性消息 第二种情况非常不同。基本上,这是一种发布/订阅场景,其中每条消息都发送到当前所有正在侦听的客户端。如果客户端脱机,则不再接收消息,并且它们也不会存储在任何地方。这意味着以下设置:
交换机: 1个类型为'fanout'的交换机 队列: n个队列,每个消费者一个 绑定: 每个队列都需要绑定到交换机
那么谁设置了什么?在我看来:
生产者创建交换机 消费者创建队列(因为它是自己的队列,生产者无法知道谁对消息感兴趣) 消费者为其队列创建绑定 消费者监听其队列
基本上,我的应用程序有三种情况。
情况1:一个发布者,多个工作进程 我想要实现的是一个组件将消息发送到队列,然后会有多个工作进程处理该队列中的项目。这对我来说似乎很容易。设置如下:
交换机: 1个类型为'direct'的交换机 队列: 1个队列 绑定: 队列绑定到交换机
每当消息发送到交换机时,它将传递到队列,并且工作进程将获取其任务。
所有内容都应该是持久的。
那么谁设置了什么?在我看来:
生产者创建交换机 生产者创建队列(因为当前可能没有运行任何工作进程,如果没有队列,消息将丢失) 生产者将队列绑定到交换机 消费者只需监听队列
情况2:一个发布者,多个订阅者,易失性消息 第二种情况非常不同。基本上,这是一种发布/订阅场景,其中每条消息都发送到当前所有正在侦听的客户端。如果客户端脱机,则不再接收消息,并且它们也不会存储在任何地方。这意味着以下设置:
交换机: 1个类型为'fanout'的交换机 队列: n个队列,每个消费者一个 绑定: 每个队列都需要绑定到交换机
那么谁设置了什么?在我看来:
生产者创建交换机 消费者创建队列(因为它是自己的队列,生产者无法知道谁对消息感兴趣) 消费者为其队列创建绑定 消费者监听其队列
对吗?
场景3: 一个发布者,多个订阅者,持久化消息
基本上和场景2差不多,但是如果消费者离线了,消息不应该丢失。在我看来,这不应该改变任何事情 - 对吗?