RabbitMQ - публикация в очереди или обмен - PullRequest
0 голосов
/ 15 января 2019

Я немного озадачен передовой практикой RabbitMQ, касающейся использования Queues и Exchange . Допустим, я хотел бы доставить сообщение GenerateInvoice с некоторыми данными для счета-фактуры, и чтобы несколько потребителей обрабатывали данные счета-фактуры и генерировали PDF. Каждый GenerateInvoice должен обрабатываться только одним потребителем.

Один из подходов состоит в том, чтобы объявить очередь и опубликовать сообщения GenerateInvoice в этой очереди и позволить всем потребителям потреблять из этой очереди. Это распространило бы сообщение среди разных потребителей.

Мне неясно, все ли в порядке, или передовой практикой является доставка сообщений на Exchange вместо публикации их непосредственно в очереди. Используя Exchange , я должен убедиться, что очередь объявлена ​​после того, как производитель создал Exchange, прежде чем он начнет публиковать сообщения. В противном случае очередь не получит сообщения, и сообщение будет потеряно.

1 Ответ

0 голосов
/ 16 января 2019

Объявление очереди, публикация сообщений 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 -> { });
...