Laravel异步队列,选择Redis还是Redis?
原文来着 https://www.jianshu.com/p/16c92227076c
今天我在异步队列的选择上,犹豫了一下。
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
这个扩展包,可以参考以下文章。
注意:
运行php artisan queue:work rabbitmq
后,他运行的地方是在cli中,所以你每次修改完,代码之后请务必要重新运行`php artisan queue:work rabbitmq
`
其他问题
RabbitMQ 怎么运行?
如果你不是java出身的同学,可能比较麻烦....
我们可以借用docker ,我们用的是rabbitmq:management
,默认密码都为guest
运行两步曲
docker pull rabbitmq:management
docker 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
使用Rxjs写前端异步流信息
傻梦兽0赞 1阅读 1.3k
One 一个简洁的博客、微博客系统
Eyeswap赞 45阅读 2.3k评论 1
Laravel 配合 jwt 使用
13sai赞 1阅读 3k
Laravel常用代码合集
13sai赞 1阅读 1.4k
「Goravel 上新」同时支持 Local, OSS, COS, S3的文件储存模块,还支持自定义,想存哪里存哪里!
韩同学的简单逻辑阅读 1.2k
【PHP】Largon 快速部署 Laravel 项目
Xander阅读 844
「Goravel 上新」用户授权模块,让你简单的对非法用户 Say No!
韩同学的简单逻辑阅读 814
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。