2016-10-06 3 views
0

Я хочу знать, что произойдет, когда мы получим ACK. Получаем ли мы ACK в одном потоке или во многих потоках?
Do handleAck и методы handleNack используются одной нитью или многими потоками? Если они используются одним потоком, тогда все в порядке. Но если они используются несколькими потоками, мы должны построить наш код в потоковом безопасном режиме.Должен ли быть синхронизирован клиент ConfirmListener в Java RabbitMQ?

ответ

1

Вы не должны написать свой код ConfirmListener поточно-но не потому, что ack и nack методы не будут вызываться из нескольких потоков, но потому, что вы не должны разделять Channel между нитями, чтобы начать с.

documentation конкретно называет это:

В то время как некоторые операции по каналам безопасны для вызова одновременно, некоторые из них и не будет приводить к неправильному кадра перемежения на провода. Совместное использование каналов между потоками также будет мешать * Издатель подтверждает.

Когда вы публикуете брокера, просто не передавайте канал. Каналы легкие и не так дорогие в создании. Таким образом, вам не нужно беспокоиться об подтверждениях.

Если вы действительно разделяете канал, ваши подтверждения будут помешаны в соответствии с приведенной выше цитатой.

Смежные вопросы