php使用rabbitmq

这里使用的是 php-amqplib

 composer require php-amqplib/php-amqplib

生产端send.php

<?phprequire_once "./vendor/autoload.php";use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;//交换机名称
$exc_name = 'exchange.canal';
//路由键
$routing_key = 'canal-routing-key';
//队列名称
$queue_key = 'canal_queue';//生产者
//Connection: publisher/consumer和broker之间的TCP连接
//Channel: 如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。
//Channel是在connection内部建立的逻辑连接Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销。//1.建立connction
/*** 主要参数说明:* $host:  RabbitMQ服务器主机IP地址* $port:  RabbitMQ服务器端口* $user:  连接RabbitMQ服务器的用户名* $password:  连接RabbitMQ服务器的用户密码* $vhost:   连接RabbitMQ服务器的vhost(服务器可以有多个vhost,虚拟主机,类似nginx的vhost)*/
$connection = new AMQPStreamConnection('192.168.0.105', 5672, 'admin', 'admin', "/");
//2.建立通道Channel
$channel = $connection->channel();//3.声明交换器
/*** exchange_declare($exchange, $type, $passive = false, $durable = false, $auto_delete = true, $internal = false, $nowait = false, $arguments = array(), $ticket = null) 。* 试探性申请一个交换器,若该交换器不存在,则创建;若存在,则跳过。* 主要参数说明:* $exchange:队列名称* $type 交换器类型,常见类型如:fanout,dircet,topic,hraders四种* $passive 只判断不创建,一般是判断该交换机是否存在* $durable:是否开启持久化 设置true表示持久化,反之非持久化。持久化可以将交换器存盘,在服务器重启的适合不会丢失相关数据。* $auto_delete:是否自动删除* $internal:设置是否内置,设置true表示内置交换器,客户端程序无法直接发送消息到这个交换器中,只能通过交换器路由到交换器这个方式* $nowait:如果为true表示不等待服务器回执信息,函数将返回NULL,可提高访问速度。*/
$channel->exchange_declare($exc_name, 'direct', false, true, false);//4.声明队列
/*** queue_declare($queue, $passive = false, $durable = false, $exclusive = false, $auto_delete = true, $nowait = false, $arguments = null, $ticket = null)* 试探性申请一个队列,若该队列不存在,则创建;若存在,则跳过。* 主要参数说明:* $queue:队列名称* $passive 只判断不创建,一般是判断该队列是否存在* $durable:是否开启持久化 设置true表示持久化,反之非持久化。持久化可以将队列存盘,在服务器重启的适合不会* $exclusive:是否独占,设置true表示独占,只能有一个消费者监听该队列,false表示共享,可以有多个消费者监听该队列。*/
$channel->queue_declare($queue_key, false, true, false, false);//5.绑定队列到交换器
/*** queue_bind($queue, $exchange, $routing_key = '', $nowait = false, $arguments = null, $ticket = null)* 绑定队列到交换器* 主要参数说明:* $queue:队列名称* $exchange:交换器名称* $routing_key:路由键*/
$channel->queue_bind($queue_key, $exc_name, $routing_key);//4.创建消息
$content = 'this is ' . $routing_key . ' message';
/*** 主要参数说明:*  data:消息*  properties Array 设置的属性,比如设置该消息是否持久化* DELIVERY_MODE_NON_PERSISTENT 不持久化* DELIVERY_MODE_PERSISTENT 持久化*/
$msg = new AMQPMessage($content, ['delivery_mode' => AMQPMessage::DELIVERY_MODE_NON_PERSISTENT]);//5.发布消息
/*** basic_publish主要参数说明:* $msg 消息内容* $exchange 交换器* $routing_key routing_key或者队列名称* $mandatory 匹配不到队列时,是否立即丢弃消息* $immediate 队列无消费者时,是否立即丢弃消息* $ticket 不清楚是什么作用*/
$channel->basic_publish($msg, $exc_name, $routing_key);
//7.通道关闭
$channel->close();
//8.连接关闭
$connection->close();

消费端receive.php

<?php
require_once "./vendor/autoload.php";use PhpAmqpLib\Connection\AMQPStreamConnection;//交换机名称
$exc_name  = 'exchange.canal';
//路由键
$routing_key = 'canal-routing-key';//1.建立connction
$connection = new AMQPStreamConnection('192.168.0.105', 5672, 'admin', 'admin', "/");
//2.建立通道Channel
$channel = $connection->channel();//3.声明交换器
$channel->exchange_declare($exc_name, 'direct', false, true, false);//4.获取系统生成的消息队列名称,这里也可以指定一个队列名称
list($queue_name, ,) = $channel->queue_declare('', false, true, true, false);//5.将队列名与交换器名进行绑定,并指定routing_key
$channel->queue_bind($queue_name,$exc_name,$routing_key);//6.设置消费成功后才能继续进行下一个消费
$channel->basic_qos(null, 1, null);//7.定义收到消息回调函数
$callback = function ($msg) {echo 'received = ', $msg->body . "\n";//确认消息已被消费,从生产队列中移除$msg->ack();
};//8.开启消费no_ack=false,设置为手动应答
$channel->basic_consume($queue_name, '', false, false, false, false, $callback);//9.不断的循环进行消费
while ($channel->is_open()) {$channel->wait();
}//关闭连接
$channel->close();
$connection->close();

参考文章

  • //https://blog.csdn.net/qq_28979487/article/details/136325509

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/6343.shtml

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

相关文章

使用Redis实现游戏排行榜

排行榜在当今应用中扮演着至关重要的角色。无论是游戏中的玩家排名、社交平台的用户活跃度榜单&#xff0c;还是其他领域的各种榜单&#xff0c;排行榜都是用户参与性和互动性的关键。在实现排行榜功能时&#xff0c;选择合适的数据库和数据结构至关重要。Redis&#xff0c;作为…

golang学习笔记(内存逃逸分析)

golang的内存逃逸 逃逸分析&#xff08; Escape analysis&#xff09; 是指由编译器决定内存分配的位置&#xff0c; 不需要程序员指定。 函数中申请一个新的对象。 如果分配在栈中&#xff0c; 则函数执行结束可自动将内存回收&#xff1b;如果分配在堆中&#xff0c; 则函数…

解决layui的bug 在layui tree 组件中 禁用选中父节点后自动选中子节点功能

最近做权限管理后台&#xff0c;用了layui tree 组件&#xff0c;发现选中了父节点后&#xff0c;自动选中了子节点。不满足现实业务需求。所以微调了下源代码。 在用树形组件中&#xff0c;在用文档中 tree.setChecked(demoId, [2, 3]); //批量勾选 id 为 2、3 的节点 用这句…

linux 服务器利用阿里网盘API实现文件的上传和下载

文章目录 背景脚本初始化 阿里云盘API工具 aligo安装aligoaligo教程实战parse.py 演示上传文件上传文件夹下载文件下载文件夹 背景 最近在用ubuntu系统做实验&#xff0c;而ubuntu 系统的文件上传和下载操作很麻烦&#xff1b; 于是便打算使用阿里网盘的API 进行文件下载与上传…

腾锐D2000-8 MXM VPX,全国产,可广泛应用于边缘计算网关、入侵检测、VPN、网络监控等等应用领域

腾锐D2000-8 MXM VPX 1. 概述 XMVPX-108 是一款基于飞腾 D2000/8 处理器的低功耗逻辑运算和图形处理 VPX 刀片&#xff0c; 板贴 32GB DDR4 内存&#xff0c;搭载飞腾 X100 套片&#xff0c;满足通用 IO 接口功能。GPU 采用 MXM 小型插卡形式&#xff0c; 搭配 8GB 显卡。提供…

NIO和NIO.2对比

Java NIO (New Input/Output) 是从Java 1.4版本开始引入的一个新的I/O API&#xff0c;用于替代原来的BIO&#xff08;Blocking I/O&#xff09;API。NIO提供了更加灵活和高效的网络通信方式&#xff0c;特别适合于高吞吐量的网络编程。NIO的主要特点是非阻塞模式&#xff0c;它…

3.4 无关、基和维度

这一节是关于子空间的真实大小。对于 m n m\times n mn 的矩阵&#xff0c;它有 n n n 个列&#xff0c;但是它真正的维数不一定为 n n n&#xff0c;维数可以由无关列的个数来得到。列空间的实际维度就是秩 r r r。 无关的概念是用于向量空间中的任意向量 v 1 , . . . ,…

【LAMMPS学习】八、基础知识(5.7)Drude感应偶极子

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

人工智能|推荐系统——工业界的推荐系统之召回

基于物品的协同过滤 ⽤索引,离线计算量⼤,线上计算量⼩ Swing额外考虑重合的⽤户是否来⾃⼀个⼩圈⼦,两个⽤户重合度⼤,则可能来⾃⼀个⼩圈⼦,权重降低。 基于用户的协同过滤 同样是离线计算索引,在线召回的流程 离散特征处理 Embedding 层参数数量=向量维度 类别数量 矩

DS高阶:图论算法经典应用

一、最小生成树&#xff08;无向图&#xff09; 在了解最小生成树算法之前&#xff0c;我们首先要先了解以下的准则&#xff1a; 连通图中的每一棵生成树&#xff0c;都是原图的一个极大无环子图&#xff0c;即&#xff1a;从其中删去任何一条边&#xff0c;生成树就不在连通&a…

mysql查询数据不对

sum(id)是算id这一列的数值总和&#xff0c;无论主键与否&#xff0c;sum都是算数值总和 count(id)或count(*)是算当前列的行数&#xff0c;id是主键才行

第十三节:Vben Admin实战-系统管理之菜单管理

系列文章目录 基础篇 第一节:Vben Admin介绍和初次运行 第二节:Vben Admin 登录逻辑梳理和对接后端准备 第三节:Vben Admin登录对接后端login接口 第四节:Vben Admin登录对接后端getUserInfo接口 第五节:Vben Admin权限-前端控制方式 第六节:Vben Admin权限-后端控制方式…

MYSQL从入门到精通(一)

1、概述 【1】使用率最高 2、数据库的重要性 【1】数组、集合、文件 【2】数据管理系统-MySQL 【3】持久化数据&#xff0c;容易管理、查询 3、相关概念 【1】DB database 数据库 【2】DBMS 数据库管理系统&#xff08;MySQL就是其中一种&#xff09; 【3】SQL 结构查询语…

SQL-慢查询的定位及优化

定位慢查询sql 启用慢查询日志&#xff1a; 确保MySQL实例已经启用了慢查询日志功能。可以通过以下命令查看是否启用&#xff1a; SHOW VARIABLES LIKE slow_query_log;如果未启用&#xff0c;可以通过以下命令启用&#xff1a; SET GLOBAL slow_query_log ON;配置慢查询日志&…

商业银行终端安全管理创新与实践

文章目录 前言一、终端使用和管理现状二、终端面临的安全风险1、传统的终端安全工具无法有效识别新型威胁2、黑客攻击的目标重心瞄向终端三、终端安全防护技术的探索和实践1、远程办公场景首次尝试基于威胁情报技术的木马防护措施,取得良好成效2、自研终端数字化管控系统,提升…

GUI SWING从入门到精通

**************************************************************************************************************************************************************************** 1、百闻不如一经历 package com.day; import com.day.pojo.SonFrame;// 主函数入口 publ…

网络基础-子网与子网划分

子网 子网&#xff08;Subnet&#xff09;是将一个大的IP地址空间划分成若干个小的子网络的过程。在网络中&#xff0c;IP地址用于唯一标识网络中的设备。子网允许网络管理员将网络分割成更小的部分&#xff0c;以便更有效地管理和组织网络资源。每个子网都有一个独特的IP地址范…

Windows 下用 git clone ... 下载资料,资料下载到什么地方去了?

当你使用 git clone 命令在 Windows 系统上克隆一个仓库时&#xff0c;资料会被下载到你指定的目录中。如果你没有指定目录&#xff0c;那么资料会被下载到你当前所在的目录&#xff08;命令提示符或终端的当前工作目录&#xff09;中的一个新文件夹里&#xff0c;这个文件夹的…

FIFO Generate IP核使用——AXI接口FIFO简介

AXI接口FIFO是从Native接口FIFO派生而来的。AXI内存映射接口提供了三种样式&#xff1a;AXI4、AXI3和AXI4-Lite。除了Native接口FIFO支持的应用外&#xff0c;AXI FIFO还可以用于AXI系统总线和点对点高速应用。 AXI接口FIFO不支持Builtin FIFO和 Shift Register FIFO配置。 当…

WebSocket 多屏同显和异显

介绍 多屏同显:通过在一个应用上进行操作之后,另一个应用也能跟着一起发生改变,例如app1播放了晴天这首音乐,那么app2也要同步播放这首音乐,确保所有屏幕显示的内容完全相同。多屏异显:每个屏幕可以显示不同的内容,或者在内容更新时存在一定的延迟,而不需要严格保持同步…