当前位置: 首页 > news >正文

ThinkPHP8集成RabbitMQ的完整案例实现

ThinkPHP8集成RabbitMQ的完整案例实现

  • 一、安装依赖:需通过Composer安装php-amqplib库‌
  • 二、配置RabbitMQ
  • 三、生产者
    • 1、发送一个邮件,将任务发送到RabbitMQ队列中。
    • 2、运行结果展示
  • 四、启动消费者:命令行执行php think rabbitmq:consumer
    • 1,在command文件夹下创建consumer.php文件
    • 2,配置指令
    • 3、执行结果展示
  • 五、补充:宝塔安装rabbitmq

一、安装依赖:需通过Composer安装php-amqplib库‌

composer require php-amqplib/php-amqplib

二、配置RabbitMQ

在服务器开放RabbitMQ端口5672

return ['default' => 'rabbitmq','connections' => ['rabbitmq' => ['driver' => 'rabbitmq','host' => '127.0.0.1', // RabbitMQ服务器地址'port' => 5672, // RabbitMQ端口'user' => 'guest', // 用户名'password' => 'guest', // 密码'vhost' => '/', // 虚拟主机'queue' => 'email_queue', // 队列名称'exchange' => 'email_exchange', // 交换机名称'routing_key' => 'email_queue', // 路由键'durable' => true, // 是否持久化队列和消息]]
];

三、生产者

1、发送一个邮件,将任务发送到RabbitMQ队列中。

app/controller/SendEMail.php

namespace app\controller;
use app\common\SendEmailJob;
use think\facade\Config;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
class SendEmail 
{public function sendemail(){$config = config('queue.connections.rabbitmq');// dd($config);$connection = new AMQPStreamConnection($config['host'], $config['port'],$config['user'], $config['password'], $config['vhost']);$channel = $connection->channel();$channel->exchange_declare($config['exchange'], 'direct', false, true, false);$channel->queue_declare($config['queue'], false, true, false, false);$channel->queue_bind($config['queue'], $config['exchange'], $config['routing_key']);$data = ['to'      => '11user@example.com','subject' => 'ThinkPHP8 RabbitMQ测试','content' => '这是一封通过消息队列发送的邮件'];$msg = new AMQPMessage(json_encode($data), ['delivery_mode' => 2]);$channel->basic_publish($msg, $config['exchange'], $config['routing_key']);$channel->close();$connection->close();return '邮件任务已发送到队列';}}

2、运行结果展示

在这里插入图片描述

四、启动消费者:命令行执行php think rabbitmq:consumer

1,在command文件夹下创建consumer.php文件

接收任务,从RabbitMQ队列中获取任务执行。
app/command/consumer.php

namespace app\command;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use PhpAmqpLib\Connection\AMQPStreamConnection;class Consumer extends Command {protected function configure() {$this->setName('rabbitmq:consumer')->setDescription('RabbitMQ消费者');}protected function execute(Input $input, Output $output) {$config = config('queue.connections.rabbitmq');$connection = new AMQPStreamConnection($config['host'], $config['port'],$config['user'], $config['password'], $config['vhost']);$channel = $connection->channel();$channel->queue_declare($config['queue'], false, true, false, false);$callback = function($msg) use ($output) {$data = json_decode($msg->body, true);$output->writeln("收到邮件任务: {$data['to']}");// 实际发送邮件逻辑$msg->ack();};$channel->basic_qos(null, 1, null);$channel->basic_consume($config['queue'], '', false, false, false, false, $callback);while ($channel->is_consuming()) {$channel->wait();}$channel->close();$connection->close();}
}

2,配置指令

config/console.php

 'commands' => ['rabbitmq:consumer' => 'app\command\Consumer',],

执行命令:

php think rabbitmq:consumer

3、执行结果展示

在这里插入图片描述

五、补充:宝塔安装rabbitmq

在宝塔软件里面安装rabbitmq 3.12.4
在这里插入图片描述
登录可直观展示
在这里插入图片描述

http://www.lryc.cn/news/598622.html

相关文章:

  • 使用 Strands Agents 开发并部署生产级架构通用型个人助手
  • 【论文阅读】基于EEG的冥想状态数据挖掘研究(2025)
  • 深入探索Amazon SQS:构建弹性微服务与无服务器应用的秘密武器
  • Nodejs:从“模块未找到”到“大师之路”, 项目初始化与依赖安全完全指南
  • JimuReport 积木报表 v2.1.1 版本发布,免费开源的报表和大屏
  • 主流摄像头协议及其开源情况,GB/T 28181协议介绍
  • Word2Vec模型训练全流程解析:从数据预处理到实体识别应用
  • PyTorch常用Tensor形状变换函数详解
  • 如何恢复mysql,避免被研发删库跑路
  • 多模态数据处理系统:用AI读PDF的智能助手系统分析
  • 六、Element-快速入门
  • K8s WebUI 选型:国外 Rancher vs 国内 KubeSphere vs 原生 Dashboard,从部署到使用心得谁更适合企业级场景?
  • 从零用java实现 小红书 springboot vue uniapp(14) 集成阿里云短信验证码
  • Android安全存储:加密文件与SharedPreferences最佳实践
  • 【C++】使用箱线图算法剔除数据样本中的异常值
  • 进程通信----匿名管道
  • 【redis其它面试问题】
  • PHP 与 Vue.js 结合的前后端分离架构
  • 工具分享02 | Python批量文件重命名工具
  • 电商接口什么意思?
  • 数据所有权与用益权分离:数字经济时代的权利博弈与“商业机遇”
  • Claude Code是如何做上下文工程的?
  • Maven Scope标签:解锁Java项目依赖管理的秘密武器
  • [嵌入式embed]ST官网-根据指定固件名下载固件库-STSWSTM32054[STM32F10x_StdPeriph_Lib_V3.5.0]
  • 使用maven-shade-plugin解决依赖版本冲突
  • RCLAMP0504S.TCT 升特半导体TVS二极管 无损传输+军工防护+纳米护甲 ESD防护芯片
  • 陕西地区特种作业操作证考试题库及答案(登高架设作业)
  • Product Hunt 每日热榜 | 2025-07-24
  • 2025年人形机器人动捕技术研讨会于7月31日在京召开
  • 火语言 RPA 在日常运维中的实践