Pull to refresh

AMQP теперь и в PHP

Lumber room
типа Введение
Протокол AMQP хорошо был описан в статьях AMQP по русски, RabbitMQ: Введение в AMQP AMQP — практика использования и мне не хотелось бы повторяться.

AMQP используется в серверах очередей: ZeroMQ, ActiveMQ, RabbitMQ.

Преимущество RabbitMQ перед прочим свободным ПО:
— более полно представлен протокол,
— поддерживает кластер,
— реализован как многопоточный сервер, высокая производительность

Широкое распространение AMQP в WEB разработках разработках сдерживается двумя причинами: отсутствием необходимых навыков (практики) его использования и малой клиентской поддержкой. В основном есть клиенты на языках с, java, python, с#. Большая популярность РНР в WEB разработках жалала бы видеть и свой AMQP-клиент.

В настоящее время ращработаны следующие PHP клиенты:
php-amqplib Протокол реализован в достаточно полном объеме на PHP. Лично у меня его запустить не удалось, виснет на классе соединения с AMQP брокером. Если кто сможет его запустить, буду признательным, если поделитесь опытом.

php-amqp — Расширение, использующее клиентскую библиотеку RabbitMQ-C. Реализована только возможность публикации сообщений.

php-rabbit — Расширение, использующее клиентскую библиотеку RabbitMQ-C hg.rabbitmq.com/rabbitmq-c. Реализован протокол в достаточном для практике использования. Развивается и поддерживается мною, так что готов к конструктивному диалогу.

После представления РНР-Rabbit сообществу RabbitMQ, сделали предложение русскоязычному Сообществу RabbitMQ создать свою русскоязычную группу обсуждения, в которую входит один из разработчиков RabbitMQ — Дмитрий Самовский

Адресс группы http://groups.google.com/group/rabbitmq_rus Желающим присоединиться Wellcome!!!
Пример использования:
// queue declare queue.php
$rabbit = new Rabbit(); // default connection localhost:5672
//user=guest psw=guets vhost="/"
$rabbit->queue("q_test"); // declare queue "q_test"


// queue declare queue2.php
$rabbit = new Rabbit(); // connection
$rabbit->queue("q_test2"); // declare queue "q_test2"

// exchange declare exchange.php
$rabbit = new Rabbit(); // connection
$rabbit->exchange('e_test', "topic"); // topic exchange declare
$rabbit->bind('e_test','q_test','key_test.t1'); // bind exchange to queue "q_test" by key="key_test"
$rabbit->bind('e_test','q_test2','key_test.t2'); // bind exchange to queue "q_test2" by key="key_test2"

// publishing to queue1 publish.php
$msg = array(
'message1','message2','message3','message4'
);
$rabbit = new Rabbit(); // connection
foreach ( $msg as $item ) // // publishing to queue1
$rabbit->publish('e_test','key_test.t1',$item);

// publishing to queue2
foreach ( $msg as $item ) // // publishing to queue2
$rabbit->publish('e_test','key_test.t2',$item."01");

// reading all messages from queue: consume.php
$rabbit = new Rabbit(); // connection
$count=$rabbit->queue("q_test");
$res =$rabbit->consume("q_test", $count)
var_dump($res);
// $res is array of messages;

// reading some messages from queue: queueItems.php
$rabbit = new Rabbit(); // connection
$count=$rabbit->queue("q_test2");

for ( $i=0; $i<$count;$i++ ){
$res = $rabbit->queueItem("q_test2" );
print_r( $res );
}

типа Эпилог
Следующий пост будет посвящен практическому применению и особенностям расширения
Tags:
Hubs:
Total votes 19: ↑12 and ↓7 +5
Views 5.9K
Comments Comments 15

Please pay attention