从网上也看了一些关于RabbitMQ的翻译版的教程,觉得有点啰嗦了。所以基于官方
http://www.rabbitmq.com/tutorials/tutorial-one-php.html做一个简单的备注说明,同时也是本人对学习RabbitMQ的一个总结。本人是从事PHP开发的,所以教程中的代码,都是使用PHP来实现,同时丢弃官网使用composer中的AMQPLIB,因为这个AMQPLIB对一些方法进行了封装,不只直观,所以本人使用原生的类、方法进行备注说明,这样更易于理解过程。
安装Rabbit参考:RabbitMQ的安装
安装Rabbit PHP扩展参考:PHP安装 AMQP扩展
PHP中的AMQP类的使用方法参考:PHP中的AMQP类
这6个教程的学习前提,你需要先了解
RabbitMQ AMQP 消息模型攻略
学习RabbitMQ必需要知道,以下几个知识点,也是RabbitMQ的灵魂:
- RabbitMQ是使用erlang开发,实现AMQP模型,使用mnesia数据库持久化数据。
- 理解Vhost、exchange、channel、queue、route key、producer、consumer,以及之间的相互关系。
- 理解exchange中的四种类型,direct、fanout、topic、headers。
如果能够充分理解3点,那么我觉得你已经学会RabbitMQ,接下来的6个教程,我更偏向把它理解成是RabbitMQ的应用场景,通过这六个场景的学习,能够深入我们的骨髓,在遇到技术问题的时候,我们能够恰当的选择RabbitMQ,那么我们就开始吧。
入门
本教程实现了从Producer发送消息,consumer接受消息的过程,也是RabbitMQ的基础的应用。
connect
下面的代码,将在每个.php文件,都应该有。为了简短篇幅,就在这入门篇,做统一的说明。在其他的章节中不再重复。
$config = [ 'host' => '192.168.80.122', 'vhost' => '/', 'port' => 5672, 'login' => 'wanda', 'password' => 'wanda' ]; $conn = new \AMQPConnection($config); $conn->connect();
send.php
$channel = new \AMQPChannel($conn); $queue = new \AMQPQueue($channel); $queue->setName('hello'); $exchange = new \AMQPExchange($channel); $result = $exchange->publish('hello world!','hello'); var_dump($result);
receive.php
$channel = new \AMQPChannel($conn); $channel->qos(0,0); $queue = new \AMQPQueue($channel); $queue->setName('hello'); $queue->declareQueue(); $result = $queue->get(); if (!empty($result)) { echo $result->getBody(); }
以上简单的实现了,从消息的发送到接受。但需要说明3个问题:
- 在send.php中,并未指定exchange的名称。实际上但未定义exchangeName时,会使用rabbitMQ中系统默认的exchange,默认的exchange是一个name为空的exchange。在使用publish时,会将消息发送到与rote key同名的queue中。
- 在receive.php中,如果未使用bind exchange,则默认绑定,RabbitMQ中默认的exchange,即为空名的exchange.
- 这个默认的exchange的Type是direct.
相关阅读:
Pingback引用通告: RabbitMQ的PHP教程之工作队列 (二) | 精彩每一天
Pingback引用通告: RabbitMQ AMQP 消息模型攻略 | 精彩每一天