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.pswp.cn/news/916502.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916502.shtml
英文地址,请注明出处:http://en.pswp.cn/news/916502.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解密负载均衡:如何轻松提升业务性能

什么是负载均衡 负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了 公司业务的…

mac neo4j install verifcation

本文使用conda环境安装,neo4j所依赖jdk也采用conda install的方式安装。 1 neo4j下载 点击如下链接,选择community, Linux/Mac Executor,点击Download Community。 本文下载的安装包是 neo4j-community-2025.06.2-unix.tar.gz 2 安装neo4j …

【Oracle】Oracle分区表“排雷“指南:当ORA-14400错误找上门时如何优雅应对

引言:分区表里的"定时炸弹"凌晨三点的机房,你盯着屏幕上刺眼的ORA-14400: 插入的分区键值超出所有分区范围错误,后背发凉。这个错误就像埋在分区表里的定时炸弹,一旦触发就会让整个应用瘫痪。但别慌!本文将带…

设计模式(十四)行为型:职责链模式详解

设计模式(十四)行为型:职责链模式详解职责链模式(Chain of Responsibility Pattern)是 GoF 23 种设计模式中的行为型模式之一,其核心价值在于将多个处理对象(处理器)连接成一条链&am…

WAIC 2025 热点解读:如何构建 AI 时代的“视频神经中枢”?

一、🌐 WAIC 2025 大会看点:AI 正在“长出眼睛与身体” 在 2025 年的人工智能大会(WAIC 2025)上,“大模型退幕后,具身智能登场”成为最具共识的趋势转向。从展区到主论坛,再到各大企业发布的新…

OpenCV+Python

安装 OpenCV: Python:直接 pip install opencv-python(核心库)和 opencv-contrib-python(扩展功能)。 pip install opencv-python pip install opencv-contrib-python 验证安装: import cv2…

现代C++的一般编程规范

一般情况下不要使用std::endl,尤其是在循环中,因为可能一开始你只是想要打印一个换行符,但是"endl"做的更多,其还会刷新缓冲区,这会额外花费很多时间,相反,只需要使用“\n"&…

38.安卓逆向2-frida hook技术-过firda检测(三)(通过SO文件过检测原理)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 工具下载: 链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

创建属于自己的github Page主页

安装手册 安装手册 环境要求 Node.js version 18.0 安装 Node.js 时,建议勾选所有和依赖相关的选项。 安装步骤 安装 Docusaurus 最简单的方法是使用 create-docusaurus 命令行工具,它可以帮助你快速搭建一个 Docusaurus 网站的基础框架。 你可以在…

Unity Catalog与Apache Iceberg如何重塑Data+AI时代的企业数据架构

在2025年DataAI Summit上,Databricks发布了一系列重大更新,标志着企业数据治理进入新阶段。其中,Unity Catalog的增强功能和对Apache Iceberg的全面支持尤为引人注目。这些更新不仅强化了跨平台数据管理能力,还推动了开放数据生态…

雨季,汽车经常跑山区,该如何保养?

雨季来临,山区道路变得湿滑难行,频繁穿梭于此的汽车面临着前所未有的挑战。如何在这样恶劣的环境中确保爱车安然无恙?本文将为你详细解析雨季经常跑山区的汽车该如何保养,让你在遭遇突发状况时也能从容应对。当雨季遇上山区路况&a…

Spring Boot音乐服务器项目-查询音乐模块

一、项目架构概览 该音乐播放服务器采用经典的MVC分层架构,核心模块包括: 实体层:定义数据模型Mapper层:数据库操作接口Controller层:HTTP请求处理工具层:加密、响应封装等辅助功能 项目核心功能包括用户…

Imagine:高效免费的图片压缩工具

很多时候,我们需要对图片进行压缩,却苦于找不到免费又好用的工具。这里给大家推荐一款电脑端的图片压缩软件——Imagine。 Imagine文末获取 它有诸多优点: 开源免费:无需担心付费问题,完全免费使用。 便捷易用&#…

《Uniapp-Vue 3-TS 实战开发》自定义年月日时分秒picker组件

目前组件: 组件完整代码: <template><view><picker mode="multiSelector" :value="multiIndex" :range="multiRange" @change="onMultiChange"><view class="picker">{{ formattedDateTime }}&l…

生命通道的智慧向导:Deepoc具身智能如何重塑医院导诊机器人的“仁心慧眼”

生命通道的智慧向导&#xff1a;Deepoc具身智能如何重塑医院导诊机器人的“仁心慧眼”清晨八点的三甲医院门诊大厅&#xff0c;一台导诊机器人突然转向无障碍通道。视觉系统捕捉到轮椅上的颤抖双手&#xff0c;自动降低语速并调大屏幕字体&#xff1b;识别出老人病历本上的“心…

【51单片机和数码管仿真显示问题共阴共阳代码】2022-9-24

缘由单片机和数码管仿真显示问题-嵌入式-CSDN问答 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f ,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64,15,56}; //共阴0~F消隐减号 void smxs(unsigned char mz, unsigned c…

Java#包管理器来时的路

不依赖任何Jar包 - HelloWorld.java mkdir demo && cd demo;# HelloWorld.java cat > HelloWorld.java << EOF public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, world!");} } EOF# 编译class javac …

Android Framework知识点

1 重点知识 1.1 Alarm 当手机重启或者应用被杀死的时候&#xff0c;Alarm会被删除&#xff0c;因此&#xff0c;如果想通过Alarm来完成长久定时任务是不可靠的&#xff0c;如果非要完成长久定时任务&#xff0c;可以这样&#xff1a;将应用的所有Alarm信息存到数据库中&#xf…

代码随想录算法训练营Day6 | 哈希表 Part 1

一、今日学习目标 掌握哈希表的核心理论&#xff08;哈希函数、哈希碰撞及解决方法&#xff09;&#xff0c;理解数组、set、map 三种哈希结构的适用场景&#xff0c;并通过「两个数组的交集」「快乐数」「两数之和」三道题目&#xff0c;实战掌握哈希表在快速查找、去重、键值…

5.13.树、森林与二叉树的转换

当使用"孩子兄弟表示法"存储树或森林时&#xff0c;最终会呈现出与二叉树类似的形态&#xff0c;所以树、森林与二叉树之间的转换本质上就是画出采用孩子兄弟表示法存储的树和森林。一."树->二叉树"的转换&#xff1a;1.例一&#xff1a;以上述图片左边…