Pull to refresh

Comments 10

Мне в RabbitMQ всегда казалось странным, что продюсеры и консьюмеры должны декларировать exchange, при этом указывая ее тип. То есть если мы внедряем мониторинг и меняем тип на fanout, то мы должны сделать исправления во всех консьюмерах и продюсерах, когда они декларируют эту exchange. Хотя они не должны знать, как она работает внутри. Это не критика вашей статьи, просто вещь, которая мне кажется странной.
Уже созданный эксчендж не будет пересоздан. Таком образом можно поменять тип эксченджа не меняя код. А то что указано в коде будет использоваться по умолчанию.
Насколько помню, в питоне aio-pika ругается, если при объявлении уже существующей exchange тип не совпадает.
> Хотя они не должны знать, как она работает внутри.

Если они не хотят знать, они же могут её использовать без декларации. Exchange может быть создан кем-то другим.
Ребят спасибо за комментарии, fanout был изначально в очереди хоть она и одна была — такой вот пример))) — статья подразумевает что нужно встроиться в то. что есть и тем более не претендует на то как нужно настраивать очереди
При определении consumer не нужно декларировать exchange. Достаточно имени exchange при декларации биндинга.
Кстати на тему мониторинга RabbitMQ я настраивал экспортер для него в prometheus а потом нескучные дашборды в grafana. Если этот стек используется, то мне кажется вполне подойдет.

Вот готовый дашборд:
grafana.com/dashboards/4279

А вот с оф. документации по самому экспортеру (можно его рядом положить или как плагин для rabbitmq поставить):
www.rabbitmq.com/prometheus.html
Подскажите там код у вас на c# бегло посмотрел или на чем ваш сайт написант, можно на код посмотреть, тема очень актуальная
Не совсем понял, о каком коде идет речь? Проект о котором я говорил это маркетплейс skybuy.ru
И c# там никакого нет :)
Подскажите как сделать непрерывный цикл мониторинга сообщений.
А то я делаю
channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
while (true)
{
var consumer = new EventingBasicConsumer(channel);
consumer.Received += Consumer_Received;
channel.BasicConsume(queue: queueName,
autoAck: true,
consumer: consumer);
}

И через пару итераций у меня вылетает
Already closed: The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=406, text='PRECONDITION_FAILED — unknown delivery tag 1', classId=60, methodId=80
Sign up to leave a comment.

Articles