Yellow RabbitMQ: x-max-length и обработка ошибок


#1

В rabbitmq мы хотим использовать для очереди ограничение на количество сообщений x-max-length.
В этом случае при попытке отправить сообщение, продюсеру будет выдана ошибка.
Например, в python используется подтверждение доставки через channel.confirm_delivery().

Используя yellowrabbit, при попытке отправить в переполненную очередь, она наглухо зависает.
Что можно сделать?


#2

Нам нужно воспроизвести для начала… В общем случае так быть не должно, не могли бы вы прислать более подробное описание ситуации на почту help@silverbulleters.org в частности версию подсистемы (потому как были особенности с подвисанием в версии “до августа” в особых случаях работы сети между хостом и сервером 1С). То есть мне нам нужно

  • используете отправку через подсистему или работаете напрямую с DLL через объект доступа ?
  • какая версия подсистемы и сервера RMQ
  • какая топология сети - на локальной петле или RabbitMQ облачно-серверный.

В подсистеме есть метод у подписчика и отправителя - ПолучитьТочноеОписаниеОшибки() - в любых исключительных ситуациях ошибка возвращается в контекст исключения. На RabbitMQ отправляется сообщение и ожидается фрейм CONFIRM_OK - если это не так, то выбрасывается исключение.

Зависание больше похоже на разрыв канала (канала подключения к серверу).

Нужно больше информации, скините ? или будет сложно ?


#3

Взяли к себе в бэклог (список задач) в проработку, по результатам отпишемся тут. Хотя еще раз прошу чуть побольше информации - можно в личке.


#4

Нам пока не удается воспроизвести ситуацию. Параметр x-max-length работает, как описано в документации:

The default behaviour for RabbitMQ when a maximum queue length or size is set and the maximum is reached is to drop or dead-letter messages from the front of the queue (i.e. the oldest messages in the queue). To modify this behaviour, use the overflow setting described below.

Как у вас настроена очередь? Что указано в параметре “overflow”? Какая версия компоненты RMQ и самого сервера RMQ?


#5

Сервер: 3.7.2
Компонента: 1.8.0 (на тот момент)

Параметры очереди:
x-max-length:1
x-overflow:reject-publish
durable:true


#6

Спасибо, поведение с зависанием подтверждаем на версии RabbitMQ старше 3.6. Так сейчас работает библиотека реализации AMQP. Мы связались с авторами и работаем над изменением поведения. На данный момент - это именно такое поведение по данному ключу на версиях 3.7.х и выше.

По результатам общения с авторами библиотеки AMQP мы примем решение об изменении поведения в нашей компоненте.

Еще раз спасибо за сообщение! :slight_smile: