Рзработка сложных систем обмена сообщениями по протоколу AMQP приходится не только отлаживать код, но и разбираться в структуре и роутинге сообщений.
Иногда трудно понять причину того или иного зависания или отсутствия сообщения. Однако, разработчиками RabbitMQ включен в составе пакета rabbitmq-java-client есть класс Tracer,
который позволяет в консольном режиме просматривать информацию об обмене.
Tracer представляет собой AMQP-прокси, который слушает клиентский порт (5673 default) и передает их на серверный (5672 default) и обратно, отображая информацию на консоли.
Инсталляция.
в три шага:
Работаем
далее смотрим:
Иногда трудно понять причину того или иного зависания или отсутствия сообщения. Однако, разработчиками RabbitMQ включен в составе пакета rabbitmq-java-client есть класс Tracer,
который позволяет в консольном режиме просматривать информацию об обмене.
Tracer представляет собой AMQP-прокси, который слушает клиентский порт (5673 default) и передает их на серверный (5672 default) и обратно, отображая информацию на консоли.
Инсталляция.
в три шага:
- Загружаем
- распаковываем
- и работаем
Работаем
//запускаем
java -cp rabbitmq-client.jar:commons-io-1.2.jar:commons-cli-1.1.jar com.rabbitmq.tools.Tracer
//или
runjava.sh com.rabbitmq.tools.Tracer listenPort connectHost connectPort listenPort
- входящий port AMQP ( default 5673)
- connectHost - host где запущен RabbitMQ ( default localhost).
- connectPort - порт, который слушает прокси ( default 5672).
далее смотрим:
$cnn = new APMQConection();
1257461452674: conn#74 ch#0 <- {#method<connection.start>(version-major=8,version-minor=0,server properties={product=RabbitMQ, platform=Erlang/OTP, information=Licensed under the MPL. See www.rabbitmq.com, copyright=Copyright (C) 2007-2009 LShift Ltd., Cohesive Financial Technologies LLC., and Rabbit Technologies Ltd., version=1.5.4},mechanisms=PLAIN AMQPLAIN,locales=en_US),null,""}
1257461452681: conn#74 ch#0 -> {#method<connection.start-ok>(client-properties={},mechanism=PLAIN,response=guestguest,locale=en_US),null,""}
1257461452682: conn#74 ch#0 <- {#method<connection.tune>(channel-max=0,frame-max=131072,heartbeat=0),null,""}
1257461452682: conn#74 ch#0 -> {#method<connection.tune-ok>(channel-max=0,frame-max=131072,heartbeat=0),null,""}
1257461452683: conn#74 ch#0 -> {#method<connection.open>(virtual-host=/,capabilities=,insist=true),null,""}
1257461452684: conn#74 ch#0 <- {#method<connection.open-ok>(known-hosts=akalend.local:5672),null,""}
1257461452684: conn#74 ch#1 -> {#method<channel.open>(out-of-band=),null,""}
1257461452684: conn#74 ch#1 <- {#method<channel.open-ok>(),null,""}
- первая колонка — timestamp
- вторая: логический номер коннекции
- третий — номар канала. На одном сокете можно открыть несколько логических каналов.
- четвертый: знаки
-> запрос AMQP брокеру
<- ответ AMQP брокера
- далее идут :
#method<channel.open-ok> - название метода open-ok { (параметры), заголовок, тело}
(...) - параметры метода
#contentHeader - заголовок типа basic
тело самого сообщения