用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版) 第二部分:工作队列(Work queues)

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

消息队列-RabbitMq(PHP)

官方教程链接地址: http://www.rabbitmq.com/tutorials/tutorial-one-php.html 首先进行安装: windows下的php rabb...

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

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

rabbitmq php测试使用

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

安装 php-rabbit: RabbitMQ 的 PHP 扩展

RabbitMQ 官方提供了三种 PHP 可用的扩展,分别是:php-amqphttp://code.google.com/p/php-amqp/php-rabbithttp://code.googl...

php rabbitmq操作类及生产者和消费者实例代码

注意事项: 1、accept.php消费者代码需要在命令行执行 2、'username'=>'asdf','password'=>'123456' 改成自己的帐号和密码 RabbitMQ...
  • nuli888
  • nuli888
  • 2016年07月08日 22:37
  • 3870

RabbitMQ消息队列在PHP下的应用

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

使用PHP访问RabbitMQ消息队列

扩展安装 PHP访问RabbitMQ实际使用的是AMQP协议,所以我们只要安装epel库中的php-pecl-amqp这个包即可 rpm -ivh http://mirror.neu.edu.cn/...
  • csdn265
  • csdn265
  • 2017年04月16日 16:13
  • 574

使用php完成一个用户注册以及管理的demo(一)

1.设计mysql的用户表 2.设计文件结构 3.制作后台增加用户的界面 4.对于数据库操作的封装,用来操作数据库的一些方式 5. include.php的制作(1)用户表的设计 my...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用PHP Demo 学 RabbitMq
举报原因:
原因补充:

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