Подтвердить что ты не робот

Почему вы не можете просматривать сообщения в очереди с кроликом?

Если мое понимание верное, вы фактически не можете просматривать сообщения в очереди кроликов, не вынимая их и не вставляя обратно. Невозможно использовать rabbitmqctl для проверки очереди.

В некоторых контекстах отладки очень полезно знать, что в настоящее время находится в очереди. Есть ли способ получить сообщения? Кроме того, что это за дизайн Кролика, который делает этот процесс громоздким?

4b9b3361

Ответ 1

Я еще не использовал это лично, но я видел плагин управления RabbitMQ, который, как я думал, позволял вам отслеживать очередь.

http://www.rabbitmq.com/management.html

Ответ 2

Существует раздел "Получить сообщения" для каждой очереди в 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/

Ответ 3

Конечно, вы можете посмотреть содержимое очереди в RabbitMQ или любом брокере AMQP. Просто употребляйте сообщения, но не признавайте их. Как только вы закроете канал, сообщения будут доступны для потребления вашими "настоящими" потребителями. Имейте в виду, что это может повлиять на упорядочение сообщений в очереди, которую вы проверяете.

Кроме того, плагин веб-управления, предлагаемый RabbitMQ, позволяет просматривать содержимое сообщений с веб-интерфейса. Если вы пытаетесь отладить свою систему, это очень полезный инструмент.

Ответ 4

Это старо, но только для тех, кто интересуется этим. Посещая Queues, у вас есть список для всех очередей брокера.

введите описание изображения здесь

Нажмите любую интересующую вас очередь и прокрутите вниз, чтобы найти этот раздел

введите описание изображения здесь

Здесь действительно важна опция Requeue. Если установлено значение Yes, эта операция будет потреблять сообщение, поэтому вы можете прочитать его, но он будет требовать его, поэтому он не будет потерян.

Ответ 5

Вы можете набить их во что-то еще прежде, чем отправить их в RabbitMQ. Для этого я написал программное обеспечение для массового обслуживания сообщений. Проверьте http://qdb.io/

Ответ 6

Нет никакого здравого способа взглянуть на очередь, но, возможно, мониторинг того, что происходит, является достаточной заменой. Для этого вам необходимо внедрить монитор "человек в середине". Для этого нужны сотрудничающие клиенты: вам нужно научить всех отправителей или всех получателей использовать другой обмен.

Предположим, вы хотите отслеживать сообщения для обмена "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. Ваш монитор просто должен привязываться к этому обмену и получит копии всех сообщений, отправленных в очередь клиентов.

Ответ 7

Возможно получить сообщение без подтверждения и затем отклонить его, что не выведет сообщение из очереди. Но это не реализовано в инструменте управления.

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

Ответ 8

Вы можете щелкнуть имя очереди сначала в веб-управлении и нажать GetMessages, чтобы получить ваше сообщение. Теперь он покажет ваши сообщения здесь введите описание изображения здесь