用PHP Demo 学 RabbitMq

原创 2016年08月30日 16:01:16

先安装rabbitmq的php扩展amqp,至于为何是amqp,稍微搜索一下就会了解rabbitmq是基于amqp协议的。

概要

我们先大致了解一下rabbitmq,简单的说就是一个生产者-消费者模式的消息队列,支持消息持久化。同时需要了解几个名词,以及这几个名词之间的联系

  1. 生产者(producer)
  2. 信道(channel)
  3. 消息交换机(exchange)
  4. 消息队列(queue)
  5. 消费者(consumer)
  6. 路由关键词

工作流程

生产者产生的消息通过信道投递到某个消息交换机上,投递过程中指定了一个路由关键字,消息交换机将这条消息投递到不同的消息队列中的时候,依据路由关键字,该消息可能会被投递到某一个或者某几个符合路由规则的消息队列中,消费者从消息队列中取出消息进行后一步处理。

分发机制

当多个消费者同时在消费同一个消息队列的时候,rabbitmq会顺序分发队列中message,当每个message收到ack,就会将这条消息从消息队列中删除,这种分发的机制叫做round-robin
这里不过多讨论rabbitmq的消息分发机制,有兴趣可以参考这个衔接
RabbitMQ消息队列(三):任务分发机制

Demo

$conn_args = array(
        'host'=>'127.0.0.1',  //rabbitmq 服务器host
        'port'=>5672,         //rabbitmq 服务器端口
        'login'=>'guest',     //登录用户
        'password'=>'guest',   //登录密码
        'vhost'=>'/'         //虚拟主机
    );
$e_name = 'e_demo';
$q_name = 'q_demo';
$k_route = 'key_1';

$conn = new AMQPConnection($conn_args);
if(!$conn->connect()){
    die('Cannot connect to the broker');
}
$channel = new AMQPChannel($conn);

$ex = new AMQPExchange($channel);
$ex->setName($e_name);
$ex->setType(AMQP_EX_TYPE_DIRECT);
$ex->setFlags(AMQP_DURABLE);
$status = $ex->declareExchange();  //声明一个新交换机,如果这个交换机已经存在了,就不需要再调用declareExchange()方法了.
$q = new AMQPQueue($channel);
$q->setName($q_name);
$status = $q->declareQueue(); //同理如果该队列已经存在不用再调用这个方法了。
$ex->publish($msg, $k_route);

以上代码就构造了一个生产者,并投递了一条消息到rabbitmq中。

$conn_args = array(
        'host'=>'127.0.0.1',
        'port'=>5672,
        'login'=>'guest',
        'password'=>'guest',
        'vhost'=>'/'
    );
$e_name = 'e_demo';
$q_name = 'q_demo';
$k_route = 'key_1';


$conn = new AMQPConnection($conn_args);
if(!$conn->connect()){
    die('Cannot connect to the broker');
}
$channel = new AMQPChannel($conn);
$ex = new AMQPExchange($channel);
$ex->setName($e_name);
$ex->setType(AMQP_EX_TYPE_DIRECT);
$ex->setFlags(AMQP_DURABLE);

$q = new AMQPQueue($channel);
var_dump($q);
$q->setName($q_name);
$q->bind($e_name, $k_route);

$arr = $q->get();
var_dump($arr);
$res = $q->ack($arr->getDeliveryTag());
$msg = $arr->getBody();
var_dump($msg);

以上代码构建了一个消费者,并从消息队列中拿出一条消息,并把该消息从队列中移除。

补充

补充说明一下rabbitmq的使用命令
rabbitmq-server start是启动rabbitmq服务。
主要的管理rabbitmq使用的是rabbitctl命令

  • rabbitmqctl start_app 启动rabbitmq
  • rabbitmqctl stop_app 关闭rabbitmq
  • rabbitmqctl reset 重置rabbitmq队列
  • rabbitmqctl list_queues 查看rabbitmq中队列
  • rabbitmqctl list_exchanges 查看rabbitmq中的交换机
版权声明:本文为博主原创文章,未经博主允许不得转载。

消息队列-RabbitMq(PHP)

官方教程链接地址: http://www.rabbitmq.com/tutorials/tutorial-one-php.html 首先进行安装: windows下的php rabb...
  • u014071426
  • u014071426
  • 2016年12月14日 23:33
  • 3115

RabbitMQ官方中文入门教程(PHP版) 第一部分:Hello World

RabbitMQ是一个消息代理。它的核心原理非常简单:接收和发送消息。你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处。在这个比喻中,RabbitMQ是一个邮箱、邮局、邮...
  • alexdream
  • alexdream
  • 2015年01月27日 20:32
  • 5028

RabbitMQ + PHP演示demo

RabbitMQ + PHP演示demo
  • johnny880730
  • johnny880730
  • 2017年04月13日 13:57
  • 767

rabbitmq php测试使用

这篇文章的php Demo代码是网上找过来的,注释添加的比较全面,容易理解,在此基础上测试 消费者:接收消息 逻辑: 创建连接–>创建channel–>创建交换机–>创建队列–>绑定交换机/队列/路由...
  • a454213722
  • a454213722
  • 2016年07月13日 12:00
  • 3000

rabbitmq php

基本概念: 1.Server(broker): 接受客户端连接,实现AMQP消息队列和路由功能的进程。 2.Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个Virtual Ho...
  • djqiang
  • djqiang
  • 2016年10月26日 11:11
  • 116

初识RabbitMQ,附RabbitMQ+PHP演示实例

RabbitMQ是一个在AMQP基础上实现的企业级消息系统。何谓消息系统,就是消息队列系统,消息队列是“”消费-生产者模型“”的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅...
  • xiaojiejie123s
  • xiaojiejie123s
  • 2017年08月30日 15:49
  • 258

RabbitMQ消息队列在PHP下的应用

消息队列的实现中,RabbitMQ以其健壮和可靠见长.公司的项目中选择了它作为消息队列的实现.关于MQ的机制和原理网上有很多文章可以看,这里就不再赘述,只讲几个比较容易混淆的问题 1,binding...
  • alexdream
  • alexdream
  • 2015年01月27日 20:31
  • 2493

RabbitMQ官方中文入门教程(PHP版) 第二部分:工作队列(Work queues)

工作队列 在第一篇教程中,我们已经写了一个从已知队列中发送和获取消息的程序。在这篇教程中,我们将创建一个工作队列(Work Queue),它会发送一些耗时的任务给多个工作者(Works )。 ...
  • alexdream
  • alexdream
  • 2015年01月27日 20:33
  • 8791

基于PHP使用rabbitmq实现消息队列

1.从github上面获取AMQP基于php的实现扩展 2.创建生产者 send.php 1 require(__DIR__ . ‘/../protected/vendor/au...
  • Aaroun
  • Aaroun
  • 2017年10月19日 19:15
  • 123

用PHP收发RabbitMQ消息

  • 2013年04月12日 17:02
  • 68KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用PHP Demo 学 RabbitMq
举报原因:
原因补充:

(最多只允许输入30个字)