[TOC] #### 1. 前言 --- 我们已经知道 RabbitMQ 的整体架构: ```plaintext Producer → Exchange → Queue → Consumer ``` 从这一讲开始,我们逐个拆解,先从最前面的 Producer 说起 #### 2. 为什么需要 Producer --- 你已经知道了:消息要放到队列里,消费者才能取,但消息不会自己跑进队列 总得有一个程序负责「把消息丢进去」,这个程序,就叫 Producer(生产者)。 #### 3. Producer 做了什么 --- Producer 做的事情其实很简单,就三步: + 第一步:连接 RabbitMQ + 第二步:告诉 Exchange 这条消息是什么 + 第三步:发送消息,然后干自己的事 #### 4. 代码怎么写 --- Producer 示例代码: ```php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Message\AMQPMessage; // 1. 连接 RabbitMQ $connection = new AMQPStreamConnection('192.168.3.20', 5672, 'admin', 'admin123'); $channel = $connection->channel(); // 2. 声明队列(确保队列存在) $channel->queue_declare('order_queue', false, true, false, false); // 3. 创建消息 $message = new AMQPMessage(json_encode([ 'user_id' => 1, 'order_id' => 1001, 'amount' => 99.00, ])); // 4. 发送消息 $channel->basic_publish($message, '', 'order_queue'); echo "消息已发送\n"; // 5. 关闭连接 $channel->close(); $connection->close(); ``` 运行之后,消息就进入 `order_queue` 了 ```bash php producer.php ``` 你可以打开管理界面,进入 Queues 页面,看到 Ready 数字变成了 1 #### 5. Producer 发完消息就结束了 --- 注意看代码的最后一行:关闭连接,Producer 是一个 短命程序,它跑完就结束了,不会一直运行 + Producer 不需要等,它把消息丢出去,任务就完成了 + 这和 Consumer 完全不同,Consumer 是常驻进程,要一直运行等着取消息 #### 6. Producer 需要关心消息去了哪里吗 --- 你可能注意到代码里写了 order_queue,当前示例里,消息最终会进入 order_queue 至于 RabbitMQ 是怎么把消息路由到队列里的,我们学 Exchange 的时候再详细讲 现在只需要知道一件事: + Producer 把消息发出去,任务就完成了 + 消息怎么存、谁来消费、什么时候消费,都不归 Producer 管 #### 7. 本文小结 --- Producer 就是发消息的程序,它的职责很简单: + 连接 RabbitMQ + 把消息发给 Exchange + 发完就走,不等结果 记住一个关键点:Producer 是短命的,发完就结束,它不需要常驻,不需要等消费者,不需要关心消息后续怎么处理 下一讲,我们来聊聊 Consumer 消费者,它和 Producer 正好相反,它要一直运行