返回顶部
首页 > 资讯 > 精选 >rabbitmq常见功能封装的示例分析
  • 189
分享到

rabbitmq常见功能封装的示例分析

2023-06-14 11:06:38 189人浏览 八月长安
摘要

这篇文章主要介绍RabbitMQ常见功能封装的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在项目中rabbitMQ得到了广泛的时候,这里对rabbitmq的常规功能做了一个简单的总结,并封装成了compos

这篇文章主要介绍RabbitMQ常见功能封装的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

项目中rabbitMQ得到了广泛的时候,这里对rabbitmq的常规功能做了一个简单的总结,并封装成了composer包,composer包地址(https://packaGISt.org/packages/maweibinguo/easyrabbitmq)、GitHub地址(Https://github.com/maweibinguo/easyrabbitmq),欢迎fork,由于水平有限,难免存在bug,欢迎提出宝贵意见

easy-rabbitmq 包简介

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

  • 推送消息到直连交换机(含延迟消息)

  • 推送消息到扇形交换机(含延迟消息)

  • 推送消息到主题交换机(含延迟消息)

  • 订阅模式下的可靠消费, 消费者消费失败后将会尝试继续消费,最多尝试5次。

  • 拉取模式下的可靠消费, 消费者消费失败后将会尝试继续消费,最多尝试5次。

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

要求

  • 安装包对PHP版本对要求主要取决于php-amqplib/php-amqplib包本身对要求,这里为了兼顾php5.0的使用者,我们使用了php-amqplib/php-amqplib包V2.9.0的版本。
    具体的要求参照这里(https://packagist.org/packages/php-amqplib/php-amqplib#v2.9.0)。
    不过笔者推荐使用php7.0及其以上版本, 这个开发包也是在7.0这个版本上面开发完成的!

安装

      composer require maweibinguo/easyrabbitmq

使用

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

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'      );

以上是“rabbitmq常见功能封装的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: rabbitmq常见功能封装的示例分析

本文链接: https://lsjlt.com/news/270654.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • rabbitmq常见功能封装的示例分析
    这篇文章主要介绍rabbitmq常见功能封装的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在项目中rabbitmq得到了广泛的时候,这里对rabbitmq的常规功能做了一个简单的总结,并封装成了compos...
    99+
    2023-06-14
  • 微信小程序封装分享与分销功能的示例分析
    这篇文章将为大家详细讲解有关微信小程序封装分享与分销功能的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言在微信小程序中,可以很简单的分享一个页面,比微信H5简...
    99+
    2024-04-02
  • JS组件封装的示例分析
    这篇文章主要介绍了JS组件封装的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、扩展已经存在的组件1、需求背景很多时候,我们使用j...
    99+
    2024-04-02
  • Android网络封装的示例分析
    这篇文章给大家分享的是有关Android网络封装的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言:模拟用户登录,从安卓发送请求到服务端校验,再从服务端返回给安卓校验结果在AndroidManifest...
    99+
    2023-06-22
  • Vue接口封装的示例分析
    这篇文章主要介绍了Vue接口封装的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先根据接口写好对应页面的请求内容如图尽量保证js文件名称与页面文件名称相同(易于查找...
    99+
    2023-06-15
  • React前端DOM常见Hook封装示例下
    目录引言useFullscreenuseHoveruseDocumentVisibility引言 本文是深入浅出 ahooks 源码系列文章的第十五篇,这个系列的目标主要有以下几点:...
    99+
    2024-04-02
  • React前端DOM常见Hook封装示例上
    目录引言useEventListeneruseClickAwayuseEventTargetuseTitleuseFavicon引言 本文是深入浅出 ahooks 源码系列文章的第十...
    99+
    2024-04-02
  • SpringBoot中使用RabbitMQ的RPC功能案例分析
    这篇文章主要讲解了“SpringBoot中使用RabbitMQ的RPC功能案例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot中使用RabbitMQ的RPC功能案例分析...
    99+
    2023-06-25
  • sqlite操作与封装的示例分析
    小编给大家分享一下sqlite操作与封装的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ocsqlite.h[plain...
    99+
    2024-04-02
  • VUE2.0+Element-UI+Echarts封装的示例分析
    这篇文章主要介绍VUE2.0+Element-UI+Echarts封装的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!-html<div class=&quo...
    99+
    2024-04-02
  • RabbitMQ单机版部署安装的示例分析
    这篇文章主要介绍了RabbitMQ单机版部署安装的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简介RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的...
    99+
    2023-06-29
  • Angular5.1新功能的示例分析
    这篇文章主要介绍Angular5.1新功能的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!新特性Angular Material和CDK稳定版CLI中支持Service Wo...
    99+
    2024-04-02
  • ajax网络请求封装的示例分析
    这篇文章主要为大家展示了“ajax网络请求封装的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ajax网络请求封装的示例分析”这篇文章吧。实例代码://...
    99+
    2024-04-02
  • JavaScript动画函数封装的示例分析
    小编给大家分享一下JavaScript动画函数封装的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、动画函数原理核心原理:通过定时器setInterval() 不断移动盒子位置。实现步骤:获得盒子当前位置让盒子在...
    99+
    2023-06-22
  • DKhadoop开发环境安装常见问题的示例分析
    这篇文章主要为大家展示了“DKhadoop开发环境安装常见问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“DKhadoop开发环境安装常见问题的示例分析”这篇文章吧。DKHadoop...
    99+
    2023-06-02
  • fetch网络请求封装示例分析
    本篇内容主要讲解“fetch网络请求封装示例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“fetch网络请求封装示例分析”吧!export default ({ ...
    99+
    2023-06-21
  • Java中数组与常见异常的示例分析
    这篇文章主要介绍Java中数组与常见异常的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数组的定义单个变量能存储信息用来存储具有相同数据类型的数据集合,可以使用共同的名字来引用数组中存储的数据。特点数组可以存...
    99+
    2023-06-29
  • MySQL 5.6 GTID常见错误的示例分析
    这篇文章给大家分享的是有关MySQL 5.6 GTID常见错误的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在测试环境搭建完基于GTID的双主环境后,启动数据库报错:[...
    99+
    2024-04-02
  • rabbitmq五种模式的示例分析
    这篇文章主要介绍了rabbitmq五种模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、五种模式详解1.简单模式(Queue模式)当生产端发送消息到交换机,交换...
    99+
    2023-06-14
  • spring boot集成rabbitmq的示例分析
    这篇文章主要为大家展示了“spring boot集成rabbitmq的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“spring boot集成rabbitmq的示例分析”这篇文章吧。一、...
    99+
    2023-05-30
    springboot rabbitmq
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作