RabbitMQ的PHP教程之入门 (一)

从网上也看了一些关于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的灵魂:

  1. RabbitMQ是使用erlang开发,实现AMQP模型,使用mnesia数据库持久化数据。
  2. 理解Vhost、exchange、channel、queue、route key、producer、consumer,以及之间的相互关系。
  3. 理解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个问题:

  1. 在send.php中,并未指定exchange的名称。实际上但未定义exchangeName时,会使用rabbitMQ中系统默认的exchange,默认的exchange是一个name为空的exchange。在使用publish时,会将消息发送到与rote key同名的queue中。
  2. 在receive.php中,如果未使用bind exchange,则默认绑定,RabbitMQ中默认的exchange,即为空名的exchange.
  3. 这个默认的exchange的Type是direct.

没有更多推荐了,返回首页