PHP & AMQP (Продолжение) Инсталляция php-rabbit

    В продолжении статьи «AMQP теперь и в РНР»
    кому интересно, какие камни ожидают при инсталляции php-rabbit

    1) Инсталляция самого брокера RabbitMQ прошла без проблем. Собирается из портов FreeBSD, MacOs, пакетов .deb
    зависимости: требует пакет эрланга (otp), само собой разумеющееся, так как RabbitMQ реализован на эрланге, который имеет хорошие внутренние механизмы многопоточности. Пытался собрать RabbitMQ из исходников, но чего-то не учел. В общем опыта не хватило.

    2) С инсталляцией Си клиента пришлось повозиться, особенности которой опишу чуточку ниже. Но если воспользоваться Меркуриал клиентом, то инсталляция у меня прошла без проблем:
    {{{
    echo Cloning rabbitmq-c
    hg clone -r 84aaa77eba59 hg.rabbitmq.com/rabbitmq-c
    cd rabbitmq-c

    echo Closning rabbitmq-codegen
    hg clone -r 75c3ef2e1083 hg.rabbitmq.com/rabbitmq-codegen codegen
    echo Compiling

    autoreconf -i && ./configure && make && make install
    }}}


    Но, первоначально, как умная Маша, я решил собрать из исходников.
    Здесь, необходимо отметить, что архитектура приложений семейства RabbitMQ устроена следующим образом: что бы не делать твердую зависимость кода от изменений протокола AMQP, группой разработчиков было предложено решение кодогенерации, в котором все протоколо-зависимые части описывались в JSON и к этому файлу (стабильный amqp-0.8.json, эксперим amqp-0.9.json) в дополнение шел кодогенератор. Кодогенератор можно взять hg.rabbitmq.com/rabbitmq-codegen/

    штатный Makefile оказался немного неработоспособными и при запуске выдает ошибку на отсутствие файлов amqp_framing.h и amqp_framing.с, по этому их необходимо сгенерировать следующим образом:
    — первоначально закачать файлы (amqp-0.8.json, amqp_codegen.py) из папки кодогенератора и добавить его в каталог librabbitmq
    — запустить кодогенератор из каталога librabbitmq: python codegen.py, должны увидеть следущее:
    python codegen.py
    Usage:
    codegen.py header|body path_to_amqp_spec.json path_to_output_file

    — ввести команду:
    python codegen.py header <full/path/to/amqp-0.8.json> <full/path/to/amqp_framing.h>
    python codegen.py body <full/path/to/amqp-0.8.json> <full/path/to/amqp_framing.c>

    После кодогенерации необходимо в Makefile отключить секции кодогенерации: amqp_framing.h и amqp_framing.c. Да и зачем они нужны, если мы это сделали ручками.

    Я, просто закомментировал их содержимое. amqp_framing.h: $(AMQP_SPEC_JSON_PATH) $(CODEGEN_PY)
    # PYTHONPATH=$(AMQP_CODEGEN_DIR) $(PYTHON) $(CODEGEN_PY) header $< $@

    amqp_framing.c: $(AMQP_SPEC_JSON_PATH) $(CODEGEN_PY)
    # PYTHONPATH=$(AMQP_CODEGEN_DIR) $(PYTHON) $(CODEGEN_PY) body $< $@


    возможно, достаточно было повозиться просто в Makefile и настроить его, чтоб не было танцами с бубнами…

    3) инсталляция расширения обычная, если как .so, то:
    в директории проектаphpize
    ./configure
    sudo make install

    далее прописываем в php.ini: rabbit.so;

    Если хотим инсталлировать статически, то переписываем модуть в директорию php/ext и далее все так же как и любое PECL расширение:
    ./buildconf
    ./configure .... --with-rabbit
    make & make install

    Комментарии 2

      0
      А windows не поддерживается?
        0
        надо исходники скомпилировать под Windows

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое