исправленный PHP модуль

45 views
Skip to first unread message

Alexandre Kalendarev

unread,
Oct 26, 2010, 10:45:06 AM10/26/10
to rabbit...@googlegroups.com
переделал Basic.Consume
сделал обработку на функциях обратного вызова - кэллбэках
что позволило съэкономить память (не городить столь огромные массивы)

кэллбэк должен возвращать true или 1 если необходимо продолжить подписку
или false - тогда происходит выход из цикла.


просьба протестировать на разных Осях
высказать замечания и посмотреть на возможные утечки

--
Alexandre
php-rabbit.experimental.tgz

Rauan Maemirov

unread,
Oct 26, 2010, 1:14:04 PM10/26/10
to rabbit...@googlegroups.com
Завтра же протестирую. Попутно хотел бы попросить метод disconnect.

2010/10/26 Alexandre Kalendarev <aka...@gmail.com>

Rauan Maemirov

unread,
Oct 26, 2010, 1:15:11 PM10/26/10
to rabbit...@googlegroups.com
Будет ли этот вариант с коллбэками реализован в pecl'овском расширении amqp? Или две версии модуля уже сильно отличаются?

2010/10/27 Rauan Maemirov <ra...@maemirov.com>

Alexandre Kalendarev

unread,
Oct 26, 2010, 4:34:11 PM10/26/10
to rabbit...@googlegroups.com
несомненно будет
НО позже :)
в пецловском модуле используется в целом мой код, но по стандартам PECL
этим заведует Питер. Я забыл пароль доступа и по этому ...

короче мне надо взяться силами и свести  обе версии к единому знаменателю 
принято решение: после сведения обоих версий гуглевский проект прибить и развивать только пецловскую ветку.

> Попутно хотел бы попросить метод disconnect.

$cnn = $AMQPConnect();
.....
unset( $cnn ); - сработает деструктор и произойдет дисконнект.

замечание принято.
Сделаю метод Close(); (чуть позже)


Александр

26 октября 2010 г. 21:15 пользователь Rauan Maemirov <ra...@maemirov.com> написал:
Будет ли этот вариант с коллбэками реализован в pecl'овском расширении amqp? Или две версии модуля уже сильно отличаются?

2010/10/27 Rauan Maemirov <ra...@maemirov.com>



2010/10/26 Alexandre Kalendarev <aka...@gmail.com>

переделал Basic.Consume
сделал обработку на функциях обратного вызова - кэллбэках
что позволило съэкономить память (не городить столь огромные массивы)

кэллбэк должен возвращать true или 1 если необходимо продолжить подписку
или false - тогда происходит выход из цикла.


просьба протестировать на разных Осях
высказать замечания и посмотреть на возможные утечки

--
Alexandre





--
Alexandre

Alexandre Kalendarev

unread,
Oct 26, 2010, 4:37:31 PM10/26/10
to rabbit...@googlegroups.com
26 октября 2010 г. 21:15 пользователь Rauan Maemirov <ra...@maemirov.com> написал:
Будет ли этот вариант с коллбэками реализован в pecl'овском расширении amqp? Или две версии модуля уже сильно отличаются?

в добавление к вышесказанному хочу сперва довести код до ума и потом все запостить в ПЕЦЛ

Alexandre

Rauan Maemirov

unread,
Oct 27, 2010, 4:35:07 AM10/27/10
to rabbit...@googlegroups.com
Все работает отлично. CentOS 5.5 x86_64 (2.6.18-194.17.1.el5.centos.plus)

Хотелось бы уточнить: новый метод consume берет данные из очереди по очереди и передает в коллбэк, а речь про огромные массивы была именно про то, что старый consume вытягивал все сразу?

Теперь, учитывая, что consume происходит в функции, как будет происходит ack? и нужен ли он там вообще? global — не очень красивое решение.

По поводу ошибки в ack - кажется, это был мой косяк, постоянно создавался новый коннект.


По поводу дисконнекта, поставил unset($conn) в деструкторе своего враппера. Трейсер регулярно выдает следующее:

1288167642908: conn#84 uncaught java.io.EOFException
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:290)
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:118)
at com.rabbitmq.tools.Tracer$DirectionHandler.readFrame(Tracer.java:238)
at com.rabbitmq.tools.Tracer$DirectionHandler.doFrame(Tracer.java:272)
at com.rabbitmq.tools.Tracer$DirectionHandler.run(Tracer.java:316)
at java.lang.Thread.run(Thread.java:636)


2010/10/27 Alexandre Kalendarev <aka...@gmail.com>

Alexandre Kalendarev

unread,
Oct 27, 2010, 5:54:25 AM10/27/10
to rabbit...@googlegroups.com


27 октября 2010 г. 12:35 пользователь Rauan Maemirov <ra...@maemirov.com> написал:

Все работает отлично. CentOS 5.5 x86_64 (2.6.18-194.17.1.el5.centos.plus)

Хотелось бы уточнить: новый метод consume берет данные из очереди по очереди и передает в коллбэк, а речь про огромные массивы была именно про то, что старый consume вытягивал все сразу?


старый consume вытягивал все сразу и строил огромный массив, ограниченных входным параметром
новый - при получении сообщения его сразу обрабатывает.

 
Теперь, учитывая, что consume происходит в функции, как будет происходит ack? и нужен ли он там вообще? global — не очень красивое решение.

ACK в принципе не нужен, если не заморачиваться со сложной логикой, т.е. использовать NOACK и специально слать ACK по каким-то своим критериям;
да, как его слать - я еще не знаю... могут полезть тараканы

 

По поводу ошибки в ack - кажется, это был мой косяк, постоянно создавался новый коннект.


По поводу дисконнекта, поставил unset($conn) в деструкторе своего враппера. Трейсер регулярно выдает следующее:

1288167642908: conn#84 uncaught java.io.EOFException
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:290)
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:118)
at com.rabbitmq.tools.Tracer$DirectionHandler.readFrame(Tracer.java:238)
at com.rabbitmq.tools.Tracer$DirectionHandler.doFrame(Tracer.java:272)
at com.rabbitmq.tools.Tracer$DirectionHandler.run(Tracer.java:316)
at java.lang.Thread.run(Thread.java:636)



очевидно это выскакивает при любом дисконнекте
но я проверю


 
2010/10/27 Alexandre Kalendarev <aka...@gmail.com>


26 октября 2010 г. 21:15 пользователь Rauan Maemirov <ra...@maemirov.com> написал:

Будет ли этот вариант с коллбэками реализован в pecl'овском расширении amqp? Или две версии модуля уже сильно отличаются?

в добавление к вышесказанному хочу сперва довести код до ума и потом все запостить в ПЕЦЛ

Alexandre




--
Alexandre
Reply all
Reply to author
Forward
0 new messages