2017-02-14 6 views
0

Мы работаем с кластером из двух узлов RabbitMQ, и мы используем драйвер Java RabbitMQ для взаимодействия с узлами. Мы используем обмен «заголовками», который передает сообщения в очереди на основе привязок заголовков и постоянных очередей.Определите очередь на нескольких узлах на RabbitMQ

Дело в том, что очереди определены для одного узла. Если по какой-то причине произошел сбой этого узла, сообщения, которые должны появиться в очередях этого узла, будут потеряны.

Есть ли способ сказать RabbitMQ изменить домашний узел очереди, когда обнаруживает, что другой узел, который их удерживает, недоступен, и поэтому, чтобы сообщения передавались в очередь? А для восстановления сообщений, когда узел снова появляется?

На данный момент мы используем высокодоступные очереди для решения этой проблемы, но производительность довольно плохая. Нам не нужны функции зеркалирования, так как для нас нормально восстанавливать сообщения, когда узел снова появляется.

ответ

1

Вам необходимо сделать messages persistent bu, установив delivery_mode на 2 и объявить очереди прочными. Таким образом, очереди возвращаются, когда узлы перезапускаются и сообщения сохраняются. Подробнее в the second tutorial. На самом деле я не вижу в учебнике, как это делается в java, но это there in phyton, поэтому вам нужно будет искать в javadoc, возможно, также параметр в методе «publish».

+0

Да, мы пробовали это. Он восстанавливает сообщения, доставленные до сбоя узла, когда узел снова появляется. Но когда узел опущен, очереди с этим узлом в качестве исходного узла по-прежнему игнорируют новые сообщения, пока узел не появится снова. – Kraiss