AMQP — отладка приложений

    Рзработка сложных систем обмена сообщениями по протоколу AMQP приходится не только отлаживать код, но и разбираться в структуре и роутинге сообщений.
    Иногда трудно понять причину того или иного зависания или отсутствия сообщения. Однако, разработчиками 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
      тело самого сообщения

    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 4

      0
      часть текста волшебным образом пропала…
      не иначе НЛО
        0
        продолжение в части 2
          0
          wireshark понимает AMQP :)
            0
            wireshark — отслеживает TCP-пакеты, на сколько я понимаю — это графическая надстройка над tcpdump

            да, можно отлеживать пакеты, но преобразовывать в человекопримный вид нужно будет ручками. Надо отметить, что AMQP — это бинарный протокол, по этому разбираться в дампах придется самостоятельно. Но, в этом есть и свои положительные стороны: Лучше освоишь AMQP.

            Only users with full accounts can post comments. Log in, please.