RabbitMQ是否可以在不存在任何队列的情况下保留直接交换消息?
我想知道是否可能出现以下情况:RabbitMQ是否可以在不存在任何队列的情况下保留直接交换消息?,rabbitmq,amqp,Rabbitmq,Amqp,我想知道是否可能出现以下情况: 创建类型为direct 使用路由密钥rk1 之后: 创建一个队列,该队列接受具有路由键的消息rk1 使用发布到exchange的邮件 似乎如果没有队列存在,消息将被丢弃,并且无法接收 因此,基本上我希望能够在没有消费者在场的情况下生成消息。并在一段时间后使用它们。实体队列是用来保存消息的队列,因此如果没有队列,消息将丢失 但是,如果您不使用适当的路由密钥创建任何交换,您可以利用rabbitmq中的死信功能。实体队列是应该保存消息的队列,因此如果没有队列,消
- 创建类型为
direct
- 使用路由密钥
rk1
- 之后:
- 创建一个队列,该队列接受具有路由键的消息
rk1
- 使用发布到exchange的邮件
- 创建一个队列,该队列接受具有路由键的消息
因此,基本上我希望能够在没有消费者在场的情况下生成消息。并在一段时间后使用它们。实体队列是用来保存消息的队列,因此如果没有队列,消息将丢失
但是,如果您不使用适当的路由密钥创建任何交换,您可以利用rabbitmq中的死信功能。实体队列是应该保存消息的队列,因此如果没有队列,消息将丢失 但是,如果您不使用适当的路由密钥创建任何交换,您可以利用rabbitmq中的死信功能 似乎如果没有队列存在,消息将被丢弃,并且无法接收 是的,这是正确的,但这只是故事的一部分 消息队列是发布到服务器的消息的存储位置。使用者是用于接收放入队列的消息的指定连接集。交换只是一个推送消息的位置。它包含路由语义,用于确定哪些消息最终进入服务器上的队列。当消息无法路由到队列和/或使用者时,会有,但默认情况下会删除该消息 处理无法发送的邮件的选项:
- -指定一个不同的交换机,如果无法将消息路由到当前交换机上的队列,则可以在其中转储消息。这可以被认为类似于TCP/IP在当前子网上无法访问目标主机时的工作方式,并且流量被转发到网关。请注意,队列必须绑定到备用交换,才能将消息转储到其中。典型的情况可能是将其配置为扇出式exchange,并使用一个队列捕获发送到备用exchange的所有消息
- -如果无法传递邮件,请将邮件返回给发件人。服务器不存储邮件。
- 必填项指定消息发布时必须可传递到队列。如果消息不可路由,发布者将收到
basic.return
- 立即指定除了可交付之外,还必须立即路由到特定队列上的消费者(例如,它不够好,不能在队列中倾倒以便稍后提取-必须立即交付给最终消费者)
- 必填项指定消息发布时必须可传递到队列。如果消息不可路由,发布者将收到
- -指定一个不同的交换机,如果无法将消息路由到当前交换机上的队列,则可以在该交换机中转储消息。这与当前子网上无法访问目标主机时TCP/IP的工作方式类似,并且流量被转发到网关。请注意,队列必须绑定到备用交换机,以便要转储到中的电子邮件。典型的情况可能是将其配置为扇出exchange,并使用一个队列捕获发送到备用exchange的所有邮件
- -如果无法传递邮件,请将邮件返回给发件人。服务器不存储邮件。
- 强制指定消息发布时必须可传递到队列。如果消息不可路由,发布者将收到一个
基本返回
- 立即指定除了可交付之外,还必须立即路由到特定队列上的消费者(例如,它不够好,不能在队列中倾倒以便稍后提取-必须立即交付给最终消费者)
- 强制指定消息发布时必须可传递到队列。如果消息不可路由,发布者将收到一个
在任何情况下,如果没有队列,服务器都无法存储消息。另一种解决方案是在交换之后和发布消息之前使用绑定声明队列;这样,消息将被路由和存储,但您可能必须添加一些TTL().另一种解决方案可能是在交换之后和发布消息之前使用绑定声明队列;这样消息将被路由和存储,但您可能需要添加一些TTL()