RabbitMQ-发布到队列或交换

时间:2019-01-15 20:30:05

标签: rabbitmq rabbitmq-exchange

对于使用 Queues Exchanges 的RabbitMQ最佳实践,我有些困惑。假设我想传递一条GenerateInvoice消息以及一些发票数据,并让多个使用者处理发票数据并生成PDF。每个GenerateInvoice只能由一个使用者处理。

一种方法是声明一个队列并将GenerateInvoice消息发布到此队列,并让所有使用者从该队列中使用。这样可以在不同的使用者之间分发消息。

我尚不清楚,是否上述方法还可以,或者最佳实践是将邮件传递到 Exchange 而不是直接将其发布到队列中。使用 Exchange ,我必须确保在生产者创建Exchange之后,在开始发布消息之前就声明了队列。否则,没有队列将接收到消息,并且消息将丢失。

1 个答案:

答案 0 :(得分:1)

在这种情况下,可以声明一个队列,将GenerateInvoice消息发布到该队列,并使该队列具有多个使用者。

发布到队列中的消息将不会丢失,并且如果没有使用方,它们将保留在RMQ上。唯一的办法是确保在发布消息之前声明队列。

Java示例:

channel.queueDeclare(QUEUE_NAME, false, false, false, null);

然后,发布可以通过以下方式完成:

channel.basicPublish("", QUEUE_NAME, null, message.getBytes());

和消耗可以通过以下方式完成:

channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });