Новые идеи по АПИ RabbitMQ AMQP для PHP

150 views
Skip to first unread message

aka...@gmail.com

unread,
Sep 28, 2009, 6:29:00 PM9/28/09
to RabbitMQ_rus
Недавно опубликовал разработанное ранее PHP API для RabbitMQ на
HabraHabr http://akalend.habrahabr.ru/blog/70757/

При обсуждении было предложено сделать PHP API более объектной
моделью,
более близкой к модели, предложенной в Протоколе AMQP.

Код немного усложнится, но объектная модель будет более красивой,

Прежде чем перейти к кодированию, представляю на обсуждение новое API


Класс AMQPConnection - открытие логического соединения, включая
канальное соединение.

$cnn = new APMQConection( cnn, [host=localhost],[port=5672],
[login=guest],[psw=guest],[vhost=/] );
$cnn->getResult(); - true/false результат выполнения соединения


Класс Обмена AMQPExchange
$exchange = new AMQPExchange($cnn, [name],[parms]) - создание обмена,
если задано имя иначе инициализация класса


$res = $exchange->declare([name]) - объявить обмен
$res = $exchange->delete([name]) - удалить обмен, если имя не задано -
удаляется с текущим именем
$res = $exchange->publish( msg, routing_key, [parms])

$res = $exchange->getResult(); - true/false результат выполнения
последней операции

$exchange = new AMQPExchange($cnn, name,[parms]) эквивалентно
$exchange = new AMQPExchange($cnn);
$res = $exchange->declare();


Класс Очереди AMQPQueue

$queue = new AMQPQueue(cnn, [name],[params]); - создание очереди, если
задано имя иначе инициализация класса
$res = $queue->delete([name]) - удаление очереди, возвращает результат
выполнения операции
$res = $queue->declaere([name],[params]) - объявление очереди,
возвращает результат выполнения операции.

$res =$queue->bind(exchange,routing_key, [parms]); -связь очереди и
обмена
$queueItem = $queue->getItem(); - получить один элемент из очереди

$arrayOfQueueItems= $queue->consume([n]) - получить массив n-сообщений
из очереди (все прочие сбрасываются ) если n не задано - выбираются
все сообщения

$queue->getResult(); - true/false результат выполнения последней
операции, в основном предназначено для использования проверки операций
в конструкторе


$queue = new AMQPQueue(cnn, name,[params]); эквивалентно:
$queue = new AMQPQueue(cnn)
$queue->declaere(name,[params])

Идеи, вопросы?

Alexander V. Khokhlov

unread,
Sep 29, 2009, 1:46:08 AM9/29/09
to rabbit...@googlegroups.com
Добрый день. 
Может быть для соединения использовать DSN синтаксис:
$cnn = new APMQConection("apmq://guest:guest@localhost/test");
ИМХО, гораздо удобней для понимания и меньше параметров для конструктора.

И вместо постоянных ->getResult() выбрасывать исключение внутри, например, AMQPConnection, если что-то пошло не так.




--
Yours sincerely
Alexander V. Khokhlov
http://wdev.tk

Alexandre Kalendarev

unread,
Sep 29, 2009, 7:29:30 PM9/29/09
to rabbit...@googlegroups.com

Добрый день. 
Может быть для соединения использовать DSN синтаксис:
$cnn = new APMQConection("apmq://guest:guest@localhost/test");
ИМХО, гораздо удобней для понимания и меньше параметров для конструктора.

как правило - все прячется по умолчанию
на локальной машине соединение:
$cnn = new APMQConection();

на продакшене 
$cnn = new APMQConection('rb1.project.local');

на прослушивание/отладка:
$cnn = new APMQConection('rb1.project.local',  5673);


 
И вместо постоянных ->getResult() выбрасывать исключение внутри, например, AMQPConnection, если что-то пошло не так.


вот тут уже высказали:
сделаю исключение


Спасибо


Александр

aka...@gmail.com

unread,
Oct 29, 2009, 3:22:58 AM10/29/09
to RabbitMQ_rus
Вторая версия http://code.google.com/p/php-rabbit/source/checkout

коннекцию AMQPConnection сделал - массив параметров

добавлены методы
AMQPQueue->detete()
AMQPQueue->purge()
AMQPQueue->unbind()

AMQPExchange->delete()
AMQPExchange->bind()

метод getItem() переименован в AMQPQueue->get();

статья на Хабре: http://habrahabr.ru/blogs/webdev/73671/
документацию для проекта пока перевожу

Reply all
Reply to author
Forward
0 new messages