一、概述
rabbitmq 是基于amqp协议的,因此了解amqp协议中的一些概念和消息的声明周期,对于理解rabbitmq原理是有很大帮助的。
1、使用docker搭建lnmp 环境 https://hub.docker.com/r/haveyb/lnmp。
2、使用docker搭建rabbitmq 服务 https://www.haveyb.com/article/292
3、安装amqp 扩展 安装该扩展 Linux 源码编译 rabbitmq 扩展 - amqp
在 lnmp 环境内写消费者和生产者,消费者和生产者使用的都是外部rabbitmq的服务。
在lnmp容器的环境里,如何使用另一个容器 rabbitmq的服务。
比如这里,我的rabbitmq容器的容器名是rabbit,因此我想看rabbit容器的ip,可以通过命令
docker inspect rabbit
可以看到,其他容器想和rabbitmq容器通信,使用172.17.0.3 即可
1、生产者代码 producer.php
<?php
declare(strict_types = 1);
try {
// 定义mq连接信息
$amq = new AMQPConnection([
'host' => '172.17.0.3',
'port' => 5672,
'vhost' => '/',
'login' => 'guest',
'password' => 'guest'
]);
// 连接mq
$amq->connect();
// 通过mq连接创建信道
$channel = new AMQPChannel($amq);
// 通过信道创建交换器对象
$exchange = new AMQPExchange($channel);
// 设置交换器名称
$exchange->setName('product_exchange');
// 设置交换器类型为direct
$exchange->setType(AMQP_EX_TYPE_DIRECT);
// 声明交换器
$exchange->declareExchange();
$data = [
'id' => 88,
'name' => '小脑斧'
];
$data = json_encode($data);
// 发布消息
$exchange->publish($data, 'self_define_routing_key');
} catch (\Exception $e) {
var_dump($e->getMessage());
}
2、消费者代码 consumer.php
<?php
declare(strict_types = 1);
try {
// 交换器名称
$exchangeName = 'product_exchange';
// 队列名称
$queueName = 'createProduct';
// RouteKey
$routeKey = 'self_define_routing_key';
// 定义mq连接信息
$amq = new AMQPConnection([
'host' => '172.17.0.3',
'port' => 5672,
'vhost' => '/',
'login' => 'guest',
'password' => 'guest'
]);
// 连接mq
$amq->connect();
// 通过mq连接创建信道
$channel = new AMQPChannel($amq);
// 通过信道创建交换器对象
$exchange = new AMQPExchange($channel);
// 设置交换器名称
$exchange->setName($exchangeName);
// 声明自己监听哪个队列
$queue = new AMQPQueue($channel);
$queue->setName($queueName);
$queue->declareQueue();
//绑定监听
$queue->bind($exchangeName,$routeKey);
$queue->consume(function ($envelope, $queue){
$data = $envelope->getBody();
var_dump($data);
//回应ack
$queue->ack($envelope->getDeliveryTag());
}); //阻塞监听
} catch (\Exception $e) {
var_dump($e->getMessage());
}
3、执行结果
先执行 php consumer.php
开始监听消息队列
再执行 php producer.php ,会将消息投递到rabbitmq的queue里,这时你会看到 消费者的窗口已经有输出了,说明消息队列生产并消费成功
然后再执行
要使用rabbitmq,需要以下几步:
1、对amqp协议有一定了解
2、安装rabbitmq服务
3、安装amqp扩展
4、写生产者和消费者代码
5、执行生产者和消费者代码,看结果