我已经阅读了 RabbitMQ 教程并阅读了几篇文章,但我仍然不清楚关于发布到交换和创建交换的最佳实践是什么。
我的用例是这样的:我们有几个不同的 REST API (Node.js),我在其中调用 RabbitMQ。例如,有一个请求,我向 RabbitMQ 交换器发布消息以创建 PDF、发送电子邮件、生成报告等。所有这些任务都很重要,我们不想丢失任何消息,因此交换器和队列被声明为持久的并且消息是持久的。但是我不确定,如果我的逻辑可以被认为是最佳实践。正如我所说的,我们有不同的项目,但它们都发布到一个持久交换器——我们称它为 main_exchange——它是一个直接交换器,然后我们为每种类型的任务——电子邮件、PDF、报告等——提供单独的队列,所以消息根据路由键附加到正确的队列。这是这个逻辑的正确方法吗?
引自RabbitMQ 教程三:
RabbitMQ 消息传递模型的核心思想是生产者从不直接向队列发送任何消息。
因此,在所有 API(生产者)中,消息都会发布到交易所。发布者对队列一无所知。队列是在工人(订阅者)中创建的。但问题是,如果我创建新的逻辑,我用新的路由键发布消息(这意味着到一个新的队列),我可以有效地丢失在创建该队列之前发送的所有消息——这意味着在启动 worker 之前,它第一次创建了那个特定的队列。换句话说,每次我想使用一个新的队列时,我必须确保在部署 API 之前启动 worker。这种情况下的标准做法是什么?