Как стать автором
Обновить

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

Время на прочтение2 мин
Количество просмотров1.7K
В продолжении статьи «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
Комментарии2

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн