Laravel异步队列,选择Redis还是Redis?
今天我在异步队列的选择上,犹豫了一下。
RabbitMQ
RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面体现不俗。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
Redis
是一个Key-Value的NoSQL数据库,开发维护很活跃,尽管它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。
由于RabbitMQ具备天然的发布订阅模式,而且还提供了其余模式,当然你也可以用RabbitMQ来做GRPC
。但是Redis没有这个,需要自己实现,换句话来说就是当消费者消费失败的时候,消息体丢失,需要手动解决。
持久化
Redis:将整个Redis实例持久化到磁盘
RabbitMQ:队列,消息,都可以选择能否持久化
这样少量特点之后,我们可以得到一个应用场景就是
Redis:轻量级,高并发,推迟敏感
即时数据分析、秒杀计数器、缓存等
RabbitMQ:重量级,高并发,异步
批量数据异步解决、并行任务串行化,高负载任务的负载均衡等
比方异步的发送邮箱呀、浏览器的客户行为、等非主要主线任务,异步发送Socket消息 等 都可以交给RabbitMQ消息队列来解决。假如是主线业务流程的话,还是考虑使用Redis吧,性能高。
RabbitMQ+PHP 教程一 Hello World
这是一篇简单文章,没用过的同学可以先试着安装,可以当时没有业务支持,并没有使用。
现在有业务支持,使用的是laravel-queue-rabbitmq
这个扩展包,可以参考以下文章。
Laravel5.6 整合 RabbitMQ 消息队列
注意:
运行php artisan queue:work rabbitmq
后,他运行的地方是在cli中,所以你每次修改完,代码之后请务必要重新运行php artisan queue:work rabbitmq
其余问题
RabbitMQ 怎样运行?
假如你不是java出身的同学,可能比较麻烦….
我们可以借用docker ,我们用的是rabbitmq:management
,默认密码都为guest
运行两步曲
docker pull rabbitmq:managementdocker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
而后浏览器可以通过IP:15672
访问rabbitmq
后端。
假如你的主程序在docker里面运行
,php
填写的地址请填写你本机的IP,例如192.168.1.1
而不是127.0.0.1
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Laravel异步队列,选择Redis还是Redis?