RabbitMQ 在php中的应用

消息队列的使用过程大概如下:
(1)客户端连接到消息队列服务器,打开一个channel。
(2)客户端声明一个exchange,并设置相关属性。
(3)客户端声明一个queue,并设置相关属性。
(4)客户端使用routing key,在exchange和queue之间建立好绑定关系。
 (5)客户端投递消息到exchange。
   使用消息队列的作用: 将一些无需即时返回且耗时的操作提取出来,进行了异步处理;大大降低了服务器的请求相应时间;
   (1) producing 发送
   (2) queue 队列
   (3) producers 生产者
   (4) consumers  消费者 
    rabbitmq - 一只小蜗牛 - 小蜗牛慢慢爬
 
  
根据上面的具体的分析,我们在写代码就很快了,具体代码如下:
<span style="font-size:14px;">/**
 * PHP amqp(RabbitMQ) Demo-Test
 * @author  wanglitao
 */
$exchangeName = 'demo';
$queueName = 'task_queue';
$routeKey = 'task_queue';
$connection = new AMQPConnection(array('host' => '127.0.0.1', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest'));
$connection->connect() or die("Cannot connect to the broker!\n");
// 创建一个连接此连接不同于上面的连接,可以理解为分支连接
$channel = new AMQPChannel($connection);
// 创建交换机(交换机的作用为将不同类型的消息进行区分;把消息分发到不同的消息队列中)
$exchange = new AMQPExchange($channel);
$exchange->setName($exchangeName);
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->declare();

// 创建队列 
$queue = new AMQPQueue($channel);
$queue->setName($queueName);
$queue->setFlags(AMQP_DURABLE);
$queue->declare();

// 绑定交换机和路由 
$queue->bind($exchangeName, $routeKey);
var_dump('[*] Waiting for messages. To exit press CTRL+C');

// 阻塞模式接收信息(不断的轮询)
while (TRUE) {
        $queue->consume('callback');
        $channel->qos(0,1);
}
$connection->disconnect();
function callback($envelope, $queue) {
        $msg = $envelope->getBody();
        var_dump(" [x] Received:" . $msg);
        sleep(substr_count($msg,'.'));
        $queue->ack($envelope->getDeliveryTag());
}</span><span style="font-size: 16px;">
</span>


<span style="font-size:14px;">/* 下面为producer 信息 */
$exchangeName = 'demo';
$queueName = 'task_queue';
$routeKey = 'task_queue';
$message = empty($argv[1]) ? 'Hello World!' : ' '.$argv[1];
// 创建producer 
$connection = new AMQPConnection(array('host' => '127.0.0.1', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest'));
// 连接 amq
$connection->connect() or die("Cannot connect to the broker!\n");
$channel = new AMQPChannel($connection);
// 创建交换机
$exchange = new AMQPExchange($channel);
$exchange->setName($exchangeName);
// 创建队列
$queue = new AMQPQueue($channel);
$queue->setName($queueName);
$queue->setFlags(AMQP_DURABLE);
$queue->declare();
//  发送消息
$exchange->publish($message, $routeKey);
var_dump("[x] Sent $message");
$connection->disconnect();</span>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值