rabbitmq php

connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');//连接mq $channel = $connection->channel();//创建一个channel
$channel->queue_declare(queue[队列名称], passive[],durable[消息持久化],exclusive[], auto_delete[]);//声明一个队列
$massage = new AMQPMessage(body[消息内容],['delivery_mode'=>AMQPMessage::DELIVERY_MODE_PERSISTENT]);//要插入队列的数据,delivery_mode代表是否持久化
$channel->basic_publish($massage, exchange, routking_key[queue名称或者routingkey]);

//---------------------

$callback = function($msg){
echo " [x] Received ", $msg->body, "\n";
sleep(substr_count($msg->body, '.'));
echo " [x] Done", "\n";
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);//应答消息已收到,可以从rabbitmq中删除数据
};
$channel->basic_qos(prefetch_size, prefetch_count,a_global);//只有consumer已经处理并确认了上一条message时queue才分派新的message给它,轮训发送消息的时候确保该work是空闲
//我们可以使用basic.qos方法,并设置prefetch_count=1。这样是告诉RabbitMQ,再同一时刻,不要发送超过1条消息给一个工作者(worker),
//直到它已经处理了上一条消息并且作出了响应。这样,RabbitMQ就会把消息分发给下一个空闲的工作者(worker)

$channel->basic_consume('task_queue', consumer_tag, no_local, no_ack[自动应答(true代表关闭,false代表开启)], exclusive, nowait, $callback);

//--------------------
 
 

猜你喜欢

转载自www.cnblogs.com/yifan72/p/10638136.html
今日推荐