消息需要延时最长24小时,什么消息队列搭配PHP和laravel生态最佳?
我的系统消息有30min-24h的延时需求,精度要求在一分钟内,我想找一个对符合需求且对laravel生态友好的MQ来做这件事。
rabbitmq可以死信或者加插件,不太希望用插件这种形式。
rocketmq倒是特别合适,但是原生没有php客户端,阿里云商用版本倒是有,但是仅支持到v4版本,最新的v5没有提供,我担心阿里云更新升级后被断供。
腾讯云提供的Pulsar最多仅支持3600秒延时,且最多能维持2万条延时消息,不符合需求
aws sqs内置在laravel中了,但是不太友好。
Beanstalkd目前来看似乎符合需求,但是没有公有云提供,需要自己部署维护。
需求:
1. 必须支持延时30min-24h,精度1分钟内。
2. 必须有ACK机制 不能丢消息,所以不能用Redis。
3. 最好公有云能提供,因为我这小项目自己单独搞台服务器跑队列奢侈,和项目放一台服务器考验运维水准,也怕损坏。
Message::dispatch($payload)->delay(now()->addDays(2)); laravel 自带的 queue 就行
扔数据库不是很舒服吗 起一个每分钟的定时任务
利用redis做延时,到点触发然后扔给mq,这样可以避免使用mq插件实现延时队列。
Redis 的确没有 ACK 机制, 但是它有 lua 原子脚本, Laravel 已经用 lua 脚本去实现 ACK 机制了, 当队列执行不正常的时候会有一个
queues:default:reserved
的 ZSET 去重试比如订单拉取定时任务 我们是通过redis 队列去跑 失败入数据库 然后重新跑 加最多次数
需要延时可以加任务时间 定时任务取入队 (腾讯云提供的 Pulsar)
阿里云。mns。完全满足。delay范围是 0~604800秒。最长7天。