parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

virusav 27.11 21:08 / 27.11 21:09

два параметра - строка name ; hash параметров
Когда я тестировал oAmqp.publish, то было совсем непривычно, что текст передается первым параметром, а остальное - хешем.

Если в большинстве случаев хеш не используется, то тогда есть смысл использовать такой подход, но тут не так.
Параметры хеша сразу видны в коде, а текстовый параметр как-то визуально теряется.
^oAmqp.declare_queue[
	$.queue[очередь] - параметр сразу бросается в глаза
	$.passive(false)
	$.durable(true)

^oAmqp.declare_queue[очередь;
	$.passive(false)
	$.durable(true)
чтобы не делать get_message, который полезен и там надо бы запланирвоать брать сразу N-сообщений из очереди (одно по умолчанию)
Есть метод amqp_basic_get, который должен брать одно сообщение из очереди без прослушки.
Если использовать его для получения нескольких сообщений (в цикле), то в теории это должно быть дольше, чем прослушка, и stop_consume через нужное количество.

Но во время прослушки для получения нескольких сообщений есть проблема: нужно определить конец очереди, чтобы выйти из нее, если, например, писем больше нет, чтобы скрипт не висел до бесконечности в ожидании последней пары сообщений.
Можно, конечно, получать в каждом callback длину очереди и ориентироваться на него, но не знаю, насколько можно верить этому числу в момент обработки текущего сообщения.

Метод amqp_basic_get возвращает параметр message_count, который равен, если я правильно понял, длине очереди минус 1 (текущее сообщение), т.е. при каждом взятии мы знаем, сколько осталось.

Пока не добрался до получения самого сообщения, только до amqp_basic_get_ok_t.

Если через consume будет реализовано правильнее и быстрее, то можно и без amqp_basic_get.
В теории stop_consume не должен мешать кому-либо другому слушать очередь, т.к. единовременно в одном скрипте может слушать только один.