<?
$cnn = new AMQPConnect();
$exchange = new AMQPExchange($cnn);
$exchange->declare('HabraGuru', 'topic',AMQP_DURABLE );
$queue = new AMQPQueue($cnn);
$queue->declare('HabraGuru', AMQP_DURABLE);
$cnn = new AMQPConnect();
$exchange = new AMQPExchange($cnn, 'HabraGuru');
for ($i=0;$i<10;$i++){
$msg = 'FriendLenta. How to. '.$i;
$exchange->publish( $msg, 'presentation');
}
Вот на получение
<?
$cnn = new AMQPConnect();
$exchange = new AMQPExchange($cnn);
$exchange->declare('HabraLuser', 'topic',AMQP_DURABLE );
$queue = new AMQPQueue($cnn, 'HabraLuser');
$queue->declare('HabraLuser', AMQP_DURABLE);
$queue->bind('HabraGuru', '*' );
$n = $queue->declare('HabraLuser', AMQP_DURABLE);
var_dump($n);
$res = $queue->consume($n);
var_dump($res);
for ($i=0;$i<=$n;$i++){
$res = $queue->get();
var_dump($res);
}
Будет ли работать данная схема?$cnn = new AMQPConnect();$exchange = new AMQPExchange($cnn);$exchange->declare('exchange_1', 'topic', AMQP_DURABLE);$exchange->bind('gurus', 'friends.#');
for ($i = 0; $i < 10; $i++) {$msg = 'FriendLenta. How to. ' . $i;$exchange->publish($msg, 'friends.feed');}Или создавать queue обязательно (хотя мы же пишем не в него, а в exchange)?
Нормально ли делать все заранее известные bind и declare в каком-нибудь отдельном скрипте?
Здравствуйте, Александр.О классе Rabbit в доках не написано ни слова.
Из примеров я понял, что это обертка над остальными AMQPConnect, AMQPExchange и так далее.Как передать свои параметры для соединения?
$cnn = new AMQPConnect(array ('port'=>5673, 'login' => 'sector1' , 'host'=> '192.168.1.12', vhost='oylolo'));
Как передать deliveryTag для метода ack?
Какие из настроек должны быть указаны обязательно?array( 'Content-type'=>'text/json' ,'Content-encoding'=>'UTF-8' ,'user_id' => 'my_user123','message_id' => 'my_msg_123','delivery_mode' => 2,'timestamp' => time(),)
Нужно ли указывать user_id, message_id, timestamp?
>$q->ack('1')Что означает '1'? true?
Пытаюсь подключиться к кролику, выходитPHP Fatal error: Uncaught exception 'Exception' with message 'Socket error' in...
С rabbitmq 2.1.1 модуль не работает?
>$q->ack('1')Что означает '1'? true?
Сильно ли отличается 0.8 от 0.9.1?
Если использовать сейчас 1.7.2, не возникнет ли никаких проблем при переходе на 2.1?
>№ consumerTag (первое сообщение)
Что-то я все никак не врублюсь.
'1' - это сообщение которое взялось отсюда? $msg = $q->get(0);
Тогда как оно может быть long deliveryTag? (то есть long?)
Что, если брать сообщения через consume?
И еще, у меня была проблема: я вытягивал из очереди 5-10 сообщений, а в очереди сообщений было больше - так вот после consume(5) в очереди сообщений больше не оставалось. Так задумано, что я должен вытянуть единожды сразу все?
Прошу прощения, просто отсутствие подробных доков и обилие примеров с питоновских либ путает меня, и вводит в ступор.
>бо большому счету - это просто номер отправленного сообщения.Уже понятнее.
Если я запущу десять воркеров, отправлять ack('1') уже не получится ведь? Откуда тогда брать deliveryTag? (в разрезе модуля)
она не течет а накапливается, а реализуется в конце бесконечного цикла (т.е. не реализуется освобождение)сейчас переделываю эту часть в корне
--
Alexandre
This method acknowledges one or more messages delivered via the Deliver or GetOk
methods. The client can ask to confirm a single message or a set of messages up to and including a specific message
Проставил AMQP_NOACK везде, где можно - не помолго.Кстати, в модуле течет память. Попробовать запустить в бесконечный цикл:Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 72 bytes) in ...Call Stack:0.0005 644048 1. {main}() ...send.php:02.1739 16719224 2. AMQPQueue->get() ...send.php:33
Само собой, выкладывайте. Проблему с ack воспроизвести не получилось?