RabbitMQ主题Exchange队列中的消息

时间:2011-11-15 16:16:08

标签: rabbitmq

注意:使用RabbitMQ .NET库

我的RabbitMQ上有一个名为 FXTO.HK 的主题交换和 FXTO的绑定密钥。# 服务器将消息发布到此队列。

在客户端,队列具有唯一且随机的名称,但使用 FXTO的相同绑定密钥。#

我们使用客户端库中的Subscription类,它工作正常:即。所有客户同时收到该消息。

但是,在RabbitMQ管理UI中,服务器队列( FXTO.HK )显示为队列中的所有消息(它们不会从队列中删除)。

我的设置有什么问题吗?何时将这些消息从服务器队列中删除?

2 个答案:

答案 0 :(得分:0)

此问题更适合RabbitMQ Discuss邮件列表。

  

但是,在RabbitMQ管理UI中,服务器队列(FXTO.HK)显示队列中的所有消息(它们不会从队列中删除)。

这强烈建议你在消费后不要回复消息。查看this示例,我看到您需要在每次致电Subscription.Next后致电Subscription.Ack(或启动NoAck mode中的Subscription

答案 1 :(得分:0)

我不太确定你的问题中“客户端”和“服务器”是什么意思。除了将自己视为每个人的服务器之外,RabbitMQ不了解客户端和服务器。发布者和消费者都不是客户端或服务器。

你说“我的RabbitMQ上有一个名为FXTO.HK的主题交换和FXTO的绑定密钥。#服务器将消息发布到此队列。”,但这没有意义。邮件是否已发布到FXTO.HK 交换或其他队列?我认为这种混淆可能是你问题的根源:

  • 如果带有FXTO.??路由密钥的邮件正在发布到交换(即您在publish功能的参数中设置了“exchange”) >绑定密钥为FXTO.#的一个或多个绑定到它的队列,这些消息将被复制到每个绑定队列中。这些消息将保留在每个队列中,直到它们在no-ack模式下被消耗或被确认。如果您碰巧有一个与绑定到交换机的交换机同名的队列(例如,交换FXTO.HK绑定到带有一些绑定密钥的队列FXTO.HK),则不会发生任何特殊行为他们分享同一个名字。消息将被复制到包含FXTO.HK的每个匹配的绑定队列中,并将位于该队列中,直到消费者连接到它并确认它们为止。
  • 如果您的消息正在发布到队列(即您没有在publish的参数中设置“exchange”,或者您正在使用默认的交换),则称为{ {1}},您的消息将保留在该队列中,直到消费者连接到该队列并接收它们/确认它们为止。不会发生交换/扇出路由。