请教一下关于MQ的技术选型?

目前开新项目业务(电商类)打算用 Larvel+Hyperf开发, Laravel负责有上下文依赖的数据库IO密集的业务,Hyperf负责一些异步的任务处理和外部接口调用和数据回传等,中间需要依赖MQ。 对于MQ(采购云服务)的技术选型目前考虑:

  1. 对于MQ这块儿只有 redis 和 kafka的使用经验, rabbitMQ和rocketMQ没在实际项目中用过
  2. redis消费完数据就不在了,且不是专业MQ,不做考虑
  3. kafka没有消费确认机制,对于订单的处理等强一致性的业务可能需要消费确认
  4. 听说rocketMQ对PHP好像不是很友好?

请教有经验的朋友,帮忙推荐一下,该选哪个比较好呢?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

只用过rabbitMQ,laravel生产,gin消费,一天200-300W条,没发现出问题

3个月前 评论
讨论数量: 27

我的项目一直在用rabbitMQ,只用了“Fanout 、topic”,目前没有发现有什么问题,也都够我们的业务使用; 我们的模式是: laravel是生产者 .net core 是消费者

3个月前 评论
穿过你的黑发的我的手 (楼主) 3个月前

只用过rabbitMQ,laravel生产,gin消费,一天200-300W条,没发现出问题

3个月前 评论

不要在业务中引入陌生人。

3个月前 评论
穿过你的黑发的我的手 (楼主) 3个月前

大多数公司rabbitMQ都够用了,rocketmq对php不太友好,不过如果是阿里云的话做了php的适配,毕竟rocketmq本来就是阿里做了捐给apache的。golang语言有一个NSQ,对phper比较友好,不过它的同一个队列只能保存在单机上,可靠性和备份靠写盘,写盘速度又慢了,不像rabbitmq和rocketmq可以把一条消息同步在多台机器做备份,如果需要ack同时极端情况允许少部分丢失或宕机的话可以上NSQ,而且它只有发布订阅模型,比rabbitmq简单,一小时就能熟练部署维护+使用

3个月前 评论

感谢各位的建议和反馈,决定就rabbitMQ了

3个月前 评论

感觉选哪个MQ都不差,但重要的问题是 1. 需要实现常驻进程的平滑退出,不能造成数据丢失 2. 保证数据重复处理的幂等性。。我目前使用的是Hyperf + Redis List 实现的队列,让我苦恼的是因为Swoole的特殊性,没法做到进程平滑退出。 :grin:

3个月前 评论
Junwind 3个月前

hyperf rabbitmq 的包我感觉做的不完善

3个月前 评论
穿过你的黑发的我的手 (楼主) 3个月前

rabitmq在PHP支持中很好,rocketmq在PHP中没使用过

3个月前 评论
穿过你的黑发的我的手 (楼主) 3个月前

之前待的公司用的是kafka,spring boot生产者,laravel消费者

3个月前 评论

php消费rabbitmq,用的是进程,一台机器最多就开几百个进程,并发有限,可以试试用swoole来消费rabbitmq,如果可以用协程消费,那么就能实现大并发的消费.仅是建议,实际我也还在试

3个月前 评论
穿过你的黑发的我的手 (楼主) 3个月前
农夫山泉 (作者) 3个月前
农夫山泉 (作者) 3个月前
农夫山泉 (作者) 3个月前

直接上Hyperf 全写呗。用kafka然后redis steam 做异常旁路 这种两个框架分开写 代码维护两份意义不大

3个月前 评论
穿过你的黑发的我的手 (楼主) 3个月前
农夫山泉 3个月前
梦想星辰大海 3个月前
  1. 看你的项目情况,如果数据量小,我觉得redis方式的消息队列其实可以处理的,觉得不可靠可以阅读下larave redis那块的代码,你就知道使用redis做消息丢列不是简单用list来做(单纯用list来做,没有确认机制容易导致消息丢失还有状态判断)
  2. 适中的话可以使用rabbitmq
  3. 大项目的话,直接用kafka
3个月前 评论
李铭昕

RabbitMQ 就行,Hyperf 实现了多路复用,性能是可以的

3个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!