文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

php中怎么使用简单可靠的rabbitmq组件包

2023-06-20 13:39

关注

本篇内容介绍了“php中怎么使用简单可靠的rabbitmq组件包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在项目中rabbitmq得到了广泛的时候,这里对rabbitmq的常规功能做了一个简单的总结,并封装成了composer包,composer包地址、github地址,欢迎fork,由于水平有限,难免存在bug,欢迎提出宝贵意见。

easy-rabbitmq 包简介

对php-amqplib/php-amqplib包的二次封装,为常见功能提供一套开箱即用的生产解决方案。目前支持的功能列表如下:

如果还有其它场景,欢迎继续补充,随后进行迭代!!

要求

安装包对PHP版本对要求主要取决于php-amqplib/php-amqplib包本身对要求,这里为了兼顾php5.0的使用者,我们使用了php-amqplib/php-amqplib包V2.9.0的版本。

具体的要求参照这里。

不过笔者推荐使用php7.0及其以上版本, 这个开发包也是在7.0这个版本上面开发完成的!

安装

      composer require maweibinguo/easyrabbitmq

使用

在这里我们推荐php脚本+supervisor结合使用,用以保证消费进程的可靠性、增强worker的消费能力! 如果你还没有听说过supervisor,可以点击这里了解.

1、推送消息

1-1、推送消息到直连交换机
      $config = [          "host" => "127.0.0.1",            "port" => "5672",            "user" => "guest",            "password" => "guest",            "vhost" => "/",            "channel_max_num" => 10,      ];          $instance = RabbitMq::getInstance($config);            //延迟消息,30 秒中后才会到达指定的交换机      $instance->pushToDirect(                        $msg = time(), //消息体内容                        $exchange = "easy_direct_exchange", //交换机名称                        $routingKey = "direct_test_queue", //消息的routingKey,consume(get) 方法到bingdingKey 要和routingKey保持一致                        $delaySec = 30 //延迟秒数      );      //无延迟,推入到指定到直链交换机      $instance->pushToDirect(                        $msg = time(), //消息体内容                        $exchange = "easy_direct_exchange", //交换机名称                        $routingKey = "direct_test_queue", //消息的routingKey,consume(get) 方法到bingdingKey 要和routingKey保持一致      );
1-2、推送消息到扇形交换机
      $config = [          "host" => "127.0.0.1",            "port" => "5672",            "user" => "guest",            "password" => "guest",            "vhost" => "/",            "channel_max_num" => 10,      ];          $instance = RabbitMq::getInstance($config);            //延迟消息,30 秒中后才会到达指定的交换机      $instance->pushToFanout(                        $msg = time(), //消息体内容                        $exchange = "easy_fanout_exchange", //交换机名称                        $delaySec = 30 //延迟秒数      );      //无延迟,推入到指定到直链交换机      $instance->pushToFanout(                        $msg = time(), //消息体内容                        $exchange = "easy_fanout_exchange" //交换机名称      );
1-3、推送消息到主题交换机
      $config = [          "host" => "127.0.0.1",            "port" => "5672",            "user" => "guest",            "password" => "guest",            "vhost" => "/",            "channel_max_num" => 10,      ];          $instance = RabbitMq::getInstance($config);            //延迟消息,30 秒中后才会到达指定的交换机      $instance->pushToTopic(                        $msg = time(), //消息体内容                        $exchange = "easy_topic_exchange", //交换机名称                                                $routingKey = "easy.topic.queue",                        $delaySec = 30 //延迟秒数      );      //无延迟,推入到指定到直链交换机      $instance->pushToTopic(                        $msg = time(), //消息体内容                        $exchange = "easy_topic_exchange", //交换机名称                        $routingKey = "easy.topic.queue"          );

2、消费消息

消费支持自动重试,最多尝试重试5次,每次消费失败后该消息将会被重新投入到消费队列中。重新的时间将会随着失败的次数增多逐渐推移,本客户端支持的推移策略如下:

失败1次(1秒钟后会再被投递), 失败2次(2秒钟后会再被投递), 失败3次(4秒钟后会再被投递), 失败4次(8秒钟后会再被投递), 失败5次(16秒钟后会再被投递)

2-1、订阅模式
订阅模式下的可靠消费
      $config = [          "host" => "127.0.0.1",            "port" => "5672",            "user" => "guest",            "password" => "guest",            "vhost" => "/",            "channel_max_num" => 10,      ];          $instance = RabbitMq::getInstance($config);      $instance->consume(            $queueName = "direct_test_queue",//订阅的队列名称            $consumerTag = "c1",//消费标记            $exchange = "easy_direct_exchange",//交换机名称            $bindingKey = "direct_test_queue",//bindingkey,如果是直链交换机需要同routingKey保持一致            $callback = function($msg){                $body = $msg->body;                file_put_contents("./test.log", "time => " . time() . "\t" . " body => " . $body . PHP_EOL , FILE_APPEND);                //如果返回结果不绝对等于(===)true,那么将触发消息重试机制                return false;            },            //5次消费消费失败后,失败消息将会投递到的队列名称            $failedQueue = "easymq@failed"      );
2-2、拉取模式
拉取模式下的可靠消费
      $config = [          "host" => "127.0.0.1",            "port" => "5672",            "user" => "guest",            "password" => "guest",            "vhost" => "/",            "channel_max_num" => 10,      ];          $instance = RabbitMq::getInstance($config);      $instance->get(            $queue = "get_queue",            $exchange = "easy_fanout_exchange",            $bindingKey = "",            $callback = function($msg){                $body = $msg->body;                file_put_contents("./test.log", "time => " . time() . "\t" . " body => " . $body . PHP_EOL , FILE_APPEND);                //如果返回结果不绝对等于(===)true,那么将触发消息重试机制                return false;            },            //5次消费消费失败后,失败消息将会投递到的队列名称            $failedQueue = 'easymq@failed'      );

“php中怎么使用简单可靠的rabbitmq组件包”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯