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这个扩展包,可以参考以下文章。

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

38 声望
4 粉丝
0 条评论
推荐阅读
使用Rxjs写前端异步流信息
准备工作 首先在 GitHub - teambition/learning-rxjs: Learning RxJS step by step clone 项目所需的 seed,本文中所有涉及到 RxJS 的代码将全部使用 TypeScript 编写。 使用 npm start 启动 seed 项目,在浏览器...

傻梦兽01阅读 1.3k

Laravel 配合 jwt 使用
测试使用的是Laravel5.5版本。安装 {代码...} 配置生成配置 {代码...} auth配置 {代码...} 编码控制器: {代码...} 路由:此处注意,我为了方便测试,使用了get方法,生产环境不建议使用get。 {代码...} 测试一下...

开源到1阅读 3.2k

Laravel常用代码合集
用Laravel也有不短的时间了,也用过不少版本了,以下代码是在日常项目中收集,作为笔记,也分享出来,希望对你有点用处。注:版本没标注,若有不兼容的问题,微调即可。

开源到1阅读 1.5k

Eloquent ORM 的 where 查询条件的解析器增强版
个人感觉 Eloquent ORM 的 where 条件解析场景并不是那么的丰富,很多条件的拼装都需要引入额外的 orWhere, whereNotIn, whereBetween, whereNotBetween 来辅助完成。这样在做一些抽象的底层查询方法时,不是很友...

big_cat1阅读 1.7k

laravel 文档摘要2
数据库对于数据的保存数据库第一二三范式到底在说什么[链接]数据库的操作独立于 query builder 和 ORM 的存在ORM 的操作是在操作内存对象 是独立的ORM 的一个对象自带了操作 relationship 的方法query builder 的...

changsj阅读 524

Goravel ORM 新增模型关联,用 Golang 写关联也可以跟 Laravel 简单
Goravel 是一个功能完备、具有良好扩展能力的 Web 应用程序框架。作为一个起始脚手架帮助 Golang 开发者快速构建自己的应用。框架风格与 Laravel 保持一致,让 PHPer 不用学习新的框架,也可以愉快的玩转 Golang!

韩同学的简单逻辑阅读 520

laravel 文档摘要
$request->input('date') 可以是 "2021-01-05 01:00:00" 字符串,通过 Carbon::parse($request->input('date') ?? now_local()),它可以被转化为 CarbonInterface::DateTimeInterface

changsj阅读 484

38 声望
4 粉丝
宣传栏