RabbitMQ直接交换,具有路由密钥,没有队列或订阅者,这样可以提高性能吗?

问题描述 投票:1回答:1

我有一个交换,每秒将接收大约50条消息。这些消息具有与该字段中的每个单元相关的唯一标识符。该唯一标识符将是路由密钥。我们不时需要调试或分析一个单元。到那时,我们将使用正确的路由密钥启动一个队列,并将其绑定到交换机。这样,该队列将开始接收该单元的消息,并且监视该队列的所有使用者都将接收消息。

这意味着在99%的时间内,交换机将没有队列,也没有路由密钥。然后,将不时地创建并订阅队列和路由密钥。

在交换要每秒丢弃50条消息时,感觉很浪费。就是说,感觉就像应该如何使用RabbitMQ交换。从开发人员的角度来看,我觉得这很浪费,但我也认为我对Rabbit的理解表明这是正确的方法。

这样做有任何开销吗?我应该对性能有任何疑问吗?还是我正在接近完全错误?

我在询问之前曾尝试进行搜索,但是没有什么能真正描述交换没有队列或路由密钥,但仍在接收消息的情况。

rabbitmq
1个回答
1
投票

正如您所描述的,这基本上是RabbitMQ的工作方式。代理不对您决定发布频率和事件数量负责。尽管如此,它将保护自己免受太大的压力。它具有基于信用的流量控制机制。 RabbitMQ flow control

RabbitMQ具有处理不可路由消息的不同方法。Unroutable Message Handling How to deal with unroutable messages

总结一下您将在这些链接上找到的信息:

如果发布者未将消息设置为必填,则它将被丢弃或重新发布到您可以配置的其他备用交换。仅当您要保留所有不可路由的消息而不管其源在单个队列中时,这才有意义,您可以稍后处理。

如果发布者将消息设置为强制性,则消息将被返回给发布者,并且发布者可以具有返回的消息处理程序设置以处理这些事件。

这些策略除了流控制机制之外,还确保RabbitMQ的可靠性和保护性。

在您的情况下,如果您想进一步限制来自生产者的消息,则需要创建一个机制,例如,因此,生产者将不会仅在使用者处于活动状态时才开始发布。因此,基本上,消费者流程将与生产者流程进行交流,使其处于活动状态并可以开始发布。但是从我的经验来看,至少在刚开始时,我认为不值得承担开销,因为每秒50条消息并不多。首先,您可以监视RabbitMQ服务器并检查资源消耗情况,以检查是否需要优化。最好通过指标和理解来实现优化。

© www.soinside.com 2019 - 2024. All rights reserved.