Есть ли способ явно привязать очередь к обмену по умолчанию в RabbitMQ?

Я сделал ошибку: теперь обе очереди явно привязаны к какому-то обмену, который я могу редактировать для каждой очереди. Одна из этих очередей должна быть привязана к обмену по умолчанию. Теперь, когда я пытаюсь изменить обмен этой очереди на пустую строку, возникает исключение:

Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=403, reply-text=ACCESS_REFUSED - operation not permitted on the default exchange, class-id=<..>, method-id=<..>)

Могу ли я передать определенные значения методу com.rabbitmq.client.Channel#queueBind для привязки очереди к defaultChange? Я использую клиентскую библиотеку Java RabbitMQ 5.6.0.


person Andrey    schedule 27.05.2020    source источник


Ответы (1)


Во-первых, нам нужно понять, что такое обмен по умолчанию;

Из документов RabbitMQ

Обмен по умолчанию — это прямой обмен без имени (пустая строка), предварительно объявленного брокером. У него есть одно особое свойство, которое делает его очень полезным для простых приложений: каждая создаваемая очередь автоматически привязывается к нему с помощью ключа маршрутизации, совпадающего с именем очереди.

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

В вашем вопросе из вашего описания похоже, что у вас есть две очереди (скажем, A и B), и вы случайно привязали обе очереди к обмену (скажем, test.exchange). Вместо внесения изменений в default.exchange вам следует удалить привязку очереди A или B к вашему обмену test.exchange.

Пожалуйста, проверьте API, связанные с "/api/bindings", в Руководстве по API RabbitMQ, или вы можете просто войти в консоль управления кроликом и также удалите привязку.

person code_kbd    schedule 02.06.2020
comment
спасибо за ответ, я не знал о такой силе консоли управления кроликом. Теперь мы сделали исправление и повторно развернули приложения, так что проблема исчезла. Но я буду помнить об удобстве использования консоли, если у меня возникнут проблемы с rabbitMQ. - person Andrey; 02.06.2020