Ответ 1
Я еще не использовал это лично, но я видел плагин управления RabbitMQ, который, как я думал, позволял вам отслеживать очередь.
Если мое понимание верное, вы фактически не можете просматривать сообщения в очереди кроликов, не вынимая их и не вставляя обратно. Невозможно использовать rabbitmqctl для проверки очереди.
В некоторых контекстах отладки очень полезно знать, что в настоящее время находится в очереди. Есть ли способ получить сообщения? Кроме того, что это за дизайн Кролика, который делает этот процесс громоздким?
Я еще не использовал это лично, но я видел плагин управления RabbitMQ, который, как я думал, позволял вам отслеживать очередь.
Существует раздел "Получить сообщения" для каждой очереди в API управления. Однако это приводит к тому, что сообщение потребляется и, следовательно, является деструктивным действием. Мы можем повторно поставить это сообщение в очередь только за счет жертвования заказа сообщений [для версий rabbitmq < 2.7.0].
Более жизнеспособной альтернативой было бы использовать трассировщик firehose, http://www.rabbitmq.com/firehose.html [для версий rabbitmq > 2.5]. Это по существу публикует сообщение для другого обмена (amq.rabbitmq.trace) только для целей отладки.
Вот еще один графический интерфейс, написанный поверх firehose для лучшей видимости, http://www.rabbitmq.com/blog/2011/09/09/rabbitmq-tracing-a-ui-for-the-firehose/
Конечно, вы можете посмотреть содержимое очереди в RabbitMQ или любом брокере AMQP. Просто употребляйте сообщения, но не признавайте их. Как только вы закроете канал, сообщения будут доступны для потребления вашими "настоящими" потребителями. Имейте в виду, что это может повлиять на упорядочение сообщений в очереди, которую вы проверяете.
Кроме того, плагин веб-управления, предлагаемый RabbitMQ, позволяет просматривать содержимое сообщений с веб-интерфейса. Если вы пытаетесь отладить свою систему, это очень полезный инструмент.
Это старо, но только для тех, кто интересуется этим.
Посещая Queues
, у вас есть список для всех очередей брокера.
Нажмите любую интересующую вас очередь и прокрутите вниз, чтобы найти этот раздел
Здесь действительно важна опция Requeue
.
Если установлено значение Yes
, эта операция будет потреблять сообщение, поэтому
вы можете прочитать его, но он будет требовать его, поэтому он не будет потерян.
Вы можете набить их во что-то еще прежде, чем отправить их в RabbitMQ. Для этого я написал программное обеспечение для массового обслуживания сообщений. Проверьте http://qdb.io/
Нет никакого здравого способа взглянуть на очередь, но, возможно, мониторинг того, что происходит, является достаточной заменой. Для этого вам необходимо внедрить монитор "человек в середине". Для этого нужны сотрудничающие клиенты: вам нужно научить всех отправителей или всех получателей использовать другой обмен.
Предположим, вы хотите отслеживать сообщения для обмена "foo" . Вы создаете (прямой) обмен под названием "foo-in" (или что-то еще), настраиваете "foo" в качестве альтернативного обмена для "foo-in" и учите всех своих отправителей отправлять свои сообщения на "foo-in", вместо "foo" .
Затем ваш монитор очереди должен прослушивать "foo-in" и повторно публиковать все сообщения в "foo" . Всякий раз, когда монитор не работает, rabbitmq направит их на "foo" сам по себе; штраф за это незначительно.
Это расширение кролика. Подробнее см. http://www.rabbitmq.com/ae.html о том, как работают альтернативные биржи. Конечно, вы можете использовать "foo" и "foo-out" соответственно, если это проще сделать в вашей настройке.
Мониторинг конкретной очереди (опять же: ввод в очередь, а не вывод) проще, но снова требует изменения клиента (или кода, который создает ваши очереди, если они постоянны). Настройте обмен фанатов, привяжите к нему очередь клиентов, а затем привяжите обмен к исходному источнику сообщений. Это еще одно расширение кролика; см. http://www.rabbitmq.com/e2e.html. Ваш монитор просто должен привязываться к этому обмену и получит копии всех сообщений, отправленных в очередь клиентов.
Возможно получить сообщение без подтверждения и затем отклонить его, что не выведет сообщение из очереди. Но это не реализовано в инструменте управления.
А также сообщение блокируется до тех пор, пока не будет выпущено значение, означающее, что другой потребитель не может его использовать, прежде чем он будет отклонен.
Вы можете щелкнуть имя очереди сначала в веб-управлении и нажать GetMessages, чтобы получить ваше сообщение.
Теперь он покажет ваши сообщения здесь