PHP 使用RabbitMq推送消息

复制代码
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
复制代码
config.php 文件
复制代码
"order_dispose" => [
    "routingKey" => "xxx",
    "name" => "xxx",
    //"class" => \app\rmq\pull\xxx::class,
    "exchange" => [
        "name" => "xxx",
        "type" => "topic", #exchange类型,可以是direct、topic、headers或fanout之一。
        "passive" => false, #如果设置为true,则不会创建exchange,仅检查是否存在指定名称的exchange。
        "durable" => true, #如果设置为true,则exchange将在重启后继续存在。
        "auto_delete" => false, #如果设置为true,则exchange将在最后一个绑定被删除后自动删除。
        "internal" => false,#如果设置为true,则exchange将用于内部用途,不允许客户端发布消息到该exchange。
    ],
    /*"queue" => [
        "name" => "xxx", #队列名称
        "passive" => false, #如果为true,则不会创建队列。如果队列不存在,则会返回一个错误
        "durable" => true, #如果为true,则队列将被持久化。当RabbitMQ服务器重启时,队列将保留下来
        "exclusive" => false, #如果为true,则队列只能被当前连接使用,当连接关闭时队列将被删除。该选项通常用于创建临时队列。
        "auto_delete" => false, #如果设置为true,则exchange将在最后一个绑定被删除后自动删除。
    ],*/
复制代码
//实现方式

/**
 * @throws \Exception
 */
public static function publisherMessage($data)
{
    // json格式数据
    $msgBody = json_encode($data);

    // 日志记录
    Log::info("rabbitmq推送订单信息" . $msgBody);

    try {
        $config = config('rabbitmq.AMQP');

        // 创建连接和通道
        $connection = new AMQPStreamConnection($config["host"], $config["port"], $config["user"], $config["password"], $config["vhost"], false, 'AMQPLAIN', null, 'en_US', 30, 60, null, false, 30);
        $channel = $connection->channel();

        // 声明交换机
        $listen_config = config("rabbitmq.Listening.order_dispose");
        $channel->exchange_declare($listen_config["exchange"]["name"], $listen_config["exchange"]["type"], $listen_config["exchange"]["passive"], $listen_config["exchange"]["durable"], $listen_config["exchange"]["auto_delete"], $listen_config["exchange"]["internal"]);

        // 创建消息
        $properties = ['content_type' => 'application/json', 'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT];
        $msg = new AMQPMessage($msgBody, $properties);

        // 发送消息到交换机
        $channel->basic_publish($msg, $listen_config["exchange"]["name"], $listen_config["routingKey"]);
        //echo " [x] Sent '$msgBody'\n";

        // 关闭通道和连接
        $channel->close();
        $connection->close();
    } catch (\Exception $e) {
        Log::info("MQ推送订单数据失败,订单信息:" . $msgBody . ',错误信息:' . $e->getMessage());
    }
}
相关推荐
Java后端的Ai之路1 分钟前
09、Python组合模式
开发语言·人工智能·python·docker·组合模式
Escalating_xu6 分钟前
【C++入门基础(上)】从发展历程、学习路线到命名空间与输入输出
开发语言·c++
jimy19 分钟前
C++ 中的rValue的判断---是否能“隐式移动”
开发语言·c++
xxy2224112 分钟前
TCP 网络编程(3):从基础通信到并发服务器与 HTTP 实战
开发语言·php
Discipline~Hai19 分钟前
Linux应用软件编程04-线程
linux·服务器·c语言·开发语言·linux应用软件编程
charlie11451419123 分钟前
Cinux · musl 静态移植:对齐 Linux ABI、铺初始栈,以及一个被 SMAP 拦下的潜伏 bug
linux·开发语言·c++·操作系统·开源项目
流浪00138 分钟前
C/C++后端筑基系列(二):C++ 从基础到进阶
开发语言·c++
JavaGuide2 小时前
一个 SKILL.md 拿下 2.3 万 Star:让 Codex/Claude Code 少说废话、先给答案
前端·后端
陈随易9 小时前
pm2 替代品,nodejs&bun 线上部署必备工具
前端·后端·程序员
丘山一郎10 小时前
Spring 中的IOC控制反转 和DI依赖注入
java·后端·spring