Comments 10
Мне в RabbitMQ всегда казалось странным, что продюсеры и консьюмеры должны декларировать exchange, при этом указывая ее тип. То есть если мы внедряем мониторинг и меняем тип на fanout, то мы должны сделать исправления во всех консьюмерах и продюсерах, когда они декларируют эту exchange. Хотя они не должны знать, как она работает внутри. Это не критика вашей статьи, просто вещь, которая мне кажется странной.
+5
Уже созданный эксчендж не будет пересоздан. Таком образом можно поменять тип эксченджа не меняя код. А то что указано в коде будет использоваться по умолчанию.
0
> Хотя они не должны знать, как она работает внутри.
Если они не хотят знать, они же могут её использовать без декларации. Exchange может быть создан кем-то другим.
Если они не хотят знать, они же могут её использовать без декларации. Exchange может быть создан кем-то другим.
0
Ребят спасибо за комментарии, fanout был изначально в очереди хоть она и одна была — такой вот пример))) — статья подразумевает что нужно встроиться в то. что есть и тем более не претендует на то как нужно настраивать очереди
0
При определении consumer не нужно декларировать exchange. Достаточно имени exchange при декларации биндинга.
0
Кстати на тему мониторинга RabbitMQ я настраивал экспортер для него в prometheus а потом нескучные дашборды в grafana. Если этот стек используется, то мне кажется вполне подойдет.
Вот готовый дашборд:
grafana.com/dashboards/4279
А вот с оф. документации по самому экспортеру (можно его рядом положить или как плагин для rabbitmq поставить):
www.rabbitmq.com/prometheus.html
Вот готовый дашборд:
grafana.com/dashboards/4279
А вот с оф. документации по самому экспортеру (можно его рядом положить или как плагин для rabbitmq поставить):
www.rabbitmq.com/prometheus.html
+1
Подскажите как сделать непрерывный цикл мониторинга сообщений.
А то я делаю
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
А то я делаю
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
0
Sign up to leave a comment.
Мониторинг сообщений в RabbitMQ