tp8 使用rabbitMQ

news2024/11/18 17:48:42

php8.0 使用 rabbitmq 要使用 3.6版本以上的, 并且还要开启 php.ini中的 socket 扩展

在这里插入图片描述
php think make:command SimpleMQProduce //创建一个生产者命令行
php think make:command SimpleMQConsumer //创建一个消费者命令行

在这里插入图片描述

生产者代码

<?php
declare (strict_types = 1);

namespace app\command;

use ba\Exception;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;

//本类是模式中的 生产者 produce
class SimpleMQProduce extends Command
{
    protected function configure()
    {
        // 指令配置
        $this->setName('SimpleMQ')
            ->setDescription('这是一个队列的 Hello模式 (最简单的应用模式),使用了默认的交换机,只需要建一个队列就可以了');
    }

    protected function execute(Input $input, Output $output)
    {
        //获取连接
        $connection = $this->connectRabbitMQ();
        //获取连接的通道
        $channel = $connection->channel();
        //直接创建一个队列
        /**
         * 关于 queue_declare参数的说明
         * params  queue  队列的名称
         * params  passive 是否消极的声明队列,如果存在,就把队列的信息返回, 如果没有就抛出错误,(是的, 你没看错,这个参数很鸡肋,所以一般为 false)
         * params  durable 是否持久化,意思是说就算队列服务持了, 也不会丢失队列
         * params  exclusive  是否排外,如果设置为true ,表示只有本次连接中的channel 可以访问,其它channel 是不可以访问的
         * params  auto_delete  设置是否自动删除。为true 则设置队列为自动删除。自动删除的前提是, 至少有一个消费者连接到这个队列,之后所有与这个队列连接的消费者都断开时,才会自动删除
         * params  nowait 相当于做一个异步版的声明, 如果设置成true, 就是说方法调用完就结束,也不用等待创建队列是否成功,一般也设为false
         */
        $channel->queue_declare("hello",false,false,false,false,false);
        for ($i = 0; $i < 20; $i++) {
            $message = ["name"=>"huang".$i,"age"=>$i,"sex"=>"man".$i];
            $msg = new AMQPMessage(json_encode($message));
            $channel->basic_publish($msg,"",'hello');  //简单模式下,routing_key 和 队列名称是一样的
            sleep(1);
        }

        //生产者调用完成后要关闭资源
        $channel->close();

    }


    //这个方法是建立一个 rabbitMQ 的资源连接
    protected function connectRabbitMQ(){
        try{
            $connection = new AMQPStreamConnection("192.168.3.228",'5672',"admin","123456");
            return $connection;
        }catch(Exception $e){
            throw new Exception("队列连接失败");
        }


    }

}


消费者代码

<?php
declare (strict_types = 1);

namespace app\command;

use ba\Exception;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;

class SimpleMQConsumer extends Command
{
    protected function configure()
    {
        // 指令配置
        $this->setName('simplemqconsumer')
            ->setDescription('这是rabbitMQ的简单模式的消费者代码');
    }

    protected function execute(Input $input, Output $output)
    {
        //创建一个资源连接
        $connection = $this->connectRabbitMQ();
        $channel = $connection->channel();
        //定义一个处理函数
        $callback = function($msg){
            $body = $msg->body;
            $bodyArr = json_decode($body,true);
            echo $bodyArr["name"] ."--".$bodyArr["age"]. "--".$bodyArr["sex"];
        };
        //声明队列,这个函数的 passive ,如果有不返回这个队列的信息,如果没有就抛出异常
        $channel->queue_declare("hello",false,false,false,false,false);
        //从队列中消费数据
        $channel->basic_consume("hello",'',false,true,false,false,$callback);
        //等待队列执行完成
        while(count($channel->callbacks)){
            $channel->wait();
        }

    }

    //这个方法是建立一个 rabbitMQ 的资源连接
    protected function connectRabbitMQ(){
        try{
            $connection = new AMQPStreamConnection("192.168.3.228",'5672',"admin","123456");
            return $connection;
        }catch(Exception $e){
            throw new Exception("队列连接失败");
        }

    }
}

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

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

相关文章

2014年10月6日 Go生态洞察:Go在Google I/O和Gopher SummerFest的应用

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Oracle-客户端连接报错ORA-12545问题

问题背景: 用户在客户端服务器通过sqlplus通过scan ip登陆访问数据库时&#xff0c;偶尔会出现连接报错ORA-12545: Connect failed because target host or object does not exist的情况。 问题分析&#xff1a; 首先&#xff0c;登陆到连接有问题的客户端数据库上&#xff0c;…

redis-cluster集群模式

Redis-cluster集群 1 Redis3.0引入的分布式存储方案 2集群由多个node节点组成,redis数据分布在节点之中,在集群之中分为主节点和从节点3集群模式当中,主从一一对应,数据写入和读取与主从模式一样&#xff0c;主负责写&#xff0c;从只能读4集群模式自带哨兵模式&#xff0c;可…

Java开源ETL工具-Kettle

一、背景 公司有个基于Kettle二次开发产品主要定位是做一些数据ETL的工作, 所谓的ETL就是针对数据进行抽取、转换以及加载的过程&#xff0c;说白了就是怎么对原始数据进行清洗&#xff0c;最后拿到我们需要的、符合规范的、有价值的数据进行存储或者分析的过程。 一般处理ETL的…

【Vue入门篇】基础篇—Vue指令,Vue生命周期

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;Vue概述&#x1f384;快速入门&#x1f33a;Vue指令⭐v-…

首批!创邻科技入选《图数据库金融应用场景优秀案例》

11月11日&#xff0c;“全球金融科技中心网络年会”在第三届全球金融科技大会暨第五届成方金融科技论坛上成功在京举办。会上&#xff0c;北京前沿金融监管科技研究院发布了基于国际标准组织——国际关联数据基准委员会&#xff08;LDBC&#xff09;的《图数据库金融应用场景优…

vivado联合modelsim测试覆盖率

&#xff08;1&#xff09;配置环境 安装modelsim和vivado。点击vivado菜单栏中的tools&#xff0c;在下拉选项中选择compile simulation libraries。simulator选项选择&#xff1a;modelsim simulator。compile library location表示编译库存放的路径。simulator executable p…

CSGO搬砖干货,全网最详细教学!

CSGO游戏搬砖全套操作流程及注意事项&#xff08;第一课&#xff09; 在电竞游戏中&#xff0c;CSGO&#xff08;Counter-Strike: Global Offensive&#xff09;被广大玩家誉为经典之作。然而&#xff0c;除了在游戏中展现个人实力和团队合作外&#xff0c;有些玩家还将CSGO作为…

前向传播与损失函数

在机器学习和深度学习中&#xff0c;前向传播和损失函数是两个关键概念。它们在神经网络的训练过程中起着重要的作用&#xff0c;帮助模型学习和优化参数。 一、前向传播 前向传播是机器学习和深度学习中一种信息传递的过程。在神经网络中&#xff0c;前向传播指的是将输入数…

【追求卓越10】算法--跳表

引导 在上一节中&#xff0c;我们学习到二分查找&#xff0c;惊叹于它超高的效率&#xff08;时间复杂度为O(logn)&#xff09;。但是二分查找有一个局限性就是依赖于数组&#xff0c;这就导致它应用并不广泛。 那么适用链表是否可以做到呢&#xff1f;答案是可以的。只不过要复…

c语言:回文字符串

题目&#xff1a; 思路&#xff1a; 创建一个字符数组&#xff0c;然后判断字符串长度&#xff0c;用循环&#xff0c;看对应字符是否相等&#xff0c;相等则输出&#xff0c;不相等则将对应字符ascll较大的改成ascll较小的&#xff08;题目要求字典最小的情况&#xff09;。…

【MySQL】内连接和外连接

内连接和外连接 前言正式开始内连接外连接左外连接右外连接 前言 前一篇讲多表查询的时候讲过笛卡尔积&#xff0c;其实笛卡尔积就算一种连接&#xff0c;不过前一篇讲的时候并没有细说连接相关的内容&#xff0c;本篇就来详细说说表的连接有哪些。 本篇博客中主要用到的还是…

WifiManager的getConnectionInfo被弃用了?快来使用ConnectivityManager获取更全的网络信息吧

前言 最近在使用flutter写桌面端的一个adb工具&#xff0c;可以使用adb命令无线连接设备&#xff0c;需要电脑和手机在同一局域网内&#xff0c;但是需要手机的ip地址。于是我想到写一个android桌面小组件&#xff0c;点一下就获取WiFi的ipv4地址并显示出来&#xff0c;先去找…

提升性能测试效率:JMeter中的用户自定义变量!

前言 在测试过程中&#xff0c;我们经常会碰到测试服务地址有改动的情况&#xff0c;为了方便&#xff0c;我们会把访问地址参数化&#xff0c;当访问地址变化了&#xff0c;我们只需要把参数对应的值改动一下就可以了。 一&#xff1a;添加配置元件-用户定义的变量&#xff…

P8599 [蓝桥杯 2013 省 B] 带分数(dfs+全排列+断点判断)

思路&#xff1a;1.深度枚举所有排列情况 2.设置为每个排列设置两个断点&#xff0c;分为三部分&#xff1a;a,b,c 3.转换为乘法判断条件&#xff0c;满足加一 代码如下&#xff1a;&#xff08;可用next_permutation全排列函数代替dfs&#xff09; #include<iostream>…

精通Nginx(18)-FastCGI/SCGI/uWSGI支持

最初用浏览器浏览的网页只能是静态html页面。随着社会发展,动态获取数据、操作数据需要变得日益强烈,CGI应运而生。CGI(Common Gateway Interface)公共网关接口,是外部扩展应用程序与静态Web服务器交互的一个标准接口。它可以使外部程序处理浏览器送来的表单数据并对此作出…

TypeScript 学习笔记 第三部分 贪吃蛇游戏

尚硅谷TypeScript教程&#xff08;李立超老师TS新课&#xff09; 1. 创建开发环境 创建工程&#xff0c;使用学习笔记的第二部分安装css部分 npm i -D less less-loader css-loader style-loader对css部分处理&#xff0c;能够运行在低版本浏览器 npm i -D postcss postcss…

数据结构与算法编程题14

设计一个算法&#xff0c;通过一趟遍历在单链表中确定值最大的结点。 #include <iostream> using namespace std;typedef int Elemtype; #define ERROR 0; #define OK 1;typedef struct LNode {Elemtype data; //结点保存的数据struct LNode* next; //结构体指针…

每日一题 1410. HTML 实体解析器(中等,模拟)

模拟&#xff0c;没什么好说的 class Solution:def entityParser(self, text: str) -> str:entityMap {&quot;: ",&apos;: "",>: >,<: <,&frasl;: /,&amp;: &,}i 0n len(text)res []while i < n:isEntity Falseif …

【从入门到起飞】JavaSE—多线程(3)(生命周期,线程安全问题,同步方法)

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;生命周期&#x1f384;线程的安全问题&#…