求问单生产者场景使用消息队列是否过度设计?

47 天前
 TimG
公司内部小程序开发,需求就是推送个人工作量月报到每个雇员的钉钉上。月报说白了就是个 PDF 文件,按照模板生成然后依次调用钉钉接口发送,业务比较简单,最多就是再生成一份部门月报发给主管。预测不会对接多个系统,这种情况下再引用一个 kafka 这样的消息队列是否有些过度设计了?以往工作都是前端,没有接触过这类,学习和后期使用成本会大于自己手动实现个基础功能的队列吗?

提前谢过各位大佬。
1305 次点击
所在节点    编程
15 条回复
inhzus
47 天前
为啥要引入消息队列呢,生产完表格后直接 webhook 调用就行?
JoeJoeJoe
47 天前
你是想加上 kafka, 摸半个月的鱼并且让 KPI 更好看
还是想
半天搞完再去忙其他的项目
kzfile
47 天前
没有强性能需求,用数据库的表模拟就行了
mindddd
47 天前
我认为一个 redis 就可以了,维护两个队列,一个消费中队列,一个是准备消费队列。最简单最保障的实现
TimG
47 天前
@inhzus 其实主要是看上有完整的日志和重放功能,我们在内网调钉钉的接口要经过挺多前置机转发,可能不稳定.......确实是,,自己想想都觉得有点多余
JYii
47 天前
我甚至都不想把这个功能放小程序上,丢到后端定时任务或接口触发,查表,填充模版,导出,发送。什么 Kafka 消息队列 redis 都不想用
TimG
47 天前
@JoeJoeJoe 摸了摸了 hhh

@kzfile
@mindddd
感谢回复。我有点盲人摸象了,不知道是否能符合需求,想提前问下各位心里有个底
TimG
47 天前
@JYii 钉钉小程序是领导要求的,说显得专业 hhhh
loading
47 天前
数据库加个表,每个人一行,定时扫这个表就行。没几个人,没必要增加技术和运维成本。
TimG
47 天前
@loading 感谢回复。扫表肯定是要扫表的,有消息队列也要扫吧,并且传统服务行业,雇员数和类型...确实出乎意料的多
SethShi
47 天前
队列和定时任务
你这个需求很明显用定时任务来执行更合适,周报月报这种有很强的定时性
你可以说生成 pdf 慢,放到队列,但是就目前你这个需求定时任务
至于失败这种和队列无关,是你的业务相关,你自己加一个字段标记发没发,没发的定时任务扫描出来
TimG
47 天前
@seth19960929 谢谢大佬,您说的我读了很多遍,现在感觉有点开窍了。我把消息队列按照字面意义理解了,认为跟弹夹一样,我提前把不同雇员的“调用钉钉发送任务”压进队列,让他自顾自的清理队列就行,至于失败重发、日志功能等等则借助消息队列自身的功能独立完成,我只管写程序压队列。听了您的解释,消息队列似乎是用来处理耗时操作的,像是高级模块化的线程调度器?它确实应该是工作在更底层的位置,而不是一个简单的 API 调度器。
失败重发我确实没想到要自己实现。看来无论如何也得自己实现一个简单队列,这个省不了了。
TimG
47 天前
@seth19960929 确实查表填入 PDF 才是更耗时和容易出问题的操作,恍然大悟了!前面都在乱说什么真丢死人了哈哈哈,感谢感谢。
SethShi
47 天前
@TimG 你可以这么认为,队列就是可靠的异步线程,线程程序可能奔溃执行不到,但是队列不会
至于你说的自己实现,我和你说原理,你自己看看
失败重试,这些都是队列自带,但是这个更底层,比如你的发消息给钉钉要 2s ,但是执行到 1.5s 的时候进城奔溃了,当你重启服务的时候,队列系统还能让你重新执行这个任务,这是队列系统本身要实现的可靠性,
至于你说的发送没发送那是业务型的,你的表 send_status. send_month
这时候定时任务是 send_status!=1.send_month!=当前月份
查出来,扔到队列或者后台执行都行,然后执行完一个就把这条记录的这两个字段标记好,放定时任务再次扫描的时候就跳过这个任务了
julyclyde
47 天前
只要前后两个的执行速度不同、业务数量比例不是一比一,都是值得用消息队列的
是解耦点,也是性能测量点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1158838

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX