Laravel异步队列,选择Redis仍是Redis?

原文来着 https://www.jianshu.com/p/16c92227076c

今天我在异步队列的选择上,犹豫了一下。php

RabbitMQ

RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。java

Redis

是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它自己支持MQ功能,因此彻底能够当作一个轻量级的队列服务来使用。laravel

由于RabbitMQ具备自然的发布订阅模式,并且还提供了其余模式,固然你也能够用RabbitMQ来作GRPC。可是Redis没有这个,须要本身实现,换句话来讲就是当消费者消费失败的时候,消息体丢失,须要手动处理。docker

持久化

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: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

相关文章
相关标签/搜索