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