我想知道是否可能出现以下情况:
direct
的交易所rk1
rk1
的邮件似乎没有队列,消息将被丢弃并且无法接收。
所以基本上,我希望在没有使用者的情况下能够产生消息。稍后再食用。
答案 0 :(得分:2)
似乎没有队列,消息将被丢弃并且无法接收。
是的,这是正确的,但这只是故事的一部分。
消息队列是发布到服务器的消息的存储位置。 消费者是一个指定的连接集,用于接收放入队列中的消息。 exchange 只是用于推送消息的位置。它包含路由语义,以确定哪些消息在服务器的队列中结束。当邮件无法路由到队列和/或使用者时,将显示various semantics that can apply,但默认值为邮件被丢弃。
处理无法路由的消息的选项:
basic.return
。在每种情况下,如果没有队列,服务器将无法存储消息。
答案 1 :(得分:0)
实体队列是应该保留消息的队列,因此,如果没有队列,消息将丢失。
但是,如果您没有使用适当的路由密钥创建任何交换,则可以利用Rabbitmq中的无效字体功能。
答案 2 :(得分:0)
另一种解决方案是在交换之后和发布消息之前声明具有绑定的队列;这样,邮件将被路由和存储,但是您可能必须添加一些TTL(https://www.rabbitmq.com/ttl.html)。