报表生成可以晚一点:认识消息队列的异步处理
【摘要】 以后台生成报表为例,介绍消息队列中任务提交、消费和结果查询的流程,以及重试、幂等与积压等基础概念。
用户点击“导出报表”后,如果系统需要整理较多数据,页面可能要等待一段时间。对于这类允许稍后获取结果的操作,可以把工作交给后台处理,让页面先展示任务已受理的状态。消息队列是实现这种异步协作的一种常见工具。
一项任务如何流转
- 提交任务:应用检查请求,记录任务信息,并按设计向消息队列发送任务通知。
- 后台处理:消费者获取消息,根据任务标识读取所需数据,执行报表生成工作。
- 查看结果:处理程序更新任务状态,用户随后查询进度,完成后再获取文件。
在这个过程中,消息通常用于描述需要处理的事件。较大的业务数据可以保存在合适的数据存储中,由消息携带必要的标识,避免把所有内容都塞进队列。页面上的“已受理”和“已完成”也应分别表达,方便用户理解当前进度。
排队之后,仍需关心结果
任务进入队列后,还需要考虑处理失败、重复投递和等待时间。消费者应能识别已经处理过的任务,避免同一条消息重复触发不必要的操作。这类设计通常称为幂等处理。
对于临时失败,可以按照业务规则进行有限次数的重试;持续失败的任务,则需要保留原因并安排后续处理。若消息长期积压,应检查消费速度、下游服务和资源情况。增加消费者是否有效,还取决于任务能否并行以及下游承载能力。
应用自身的任务记录与消息发送也可能出现不一致,例如任务已创建但通知没有发出。实际设计中需要考虑补偿或可靠投递方案,保证这些任务能够被发现和跟进。
华为云提供分布式消息相关服务,学习时可以结合业务需求查阅Kafka、RocketMQ等相应产品文档。入门可以先做一个简单的后台任务,观察提交、消费、重试和完成几个环节,再逐步补充异常处理。异步处理增加了协作环节,是否采用,应由业务对响应时间和结果时效的要求决定。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)