消息队列应用场景

消息队列(Message Queue),简称MQ,是一种跨进程的通信机制,用于上下游之间传递消息。那些场景需要用到MQ呢?

1   典型应用场景一  数据驱动的任务依赖

       什么是任务依赖?举个例子,许多互联网公司会在凌晨进行数据统计任务,任务之间有一定的依赖关系。Task2需要Task1的输出结果作为输入,Task3又需要Task2的结果作为输入。Task1,Task2,Task3就有任务依赖关系,必须Task1先执行,Task2再执行,Task3最后执行。

        对于这类需求,常见的实现方式是使用cron人工排任务执行时间表。

        task1 0:00执行,经验执行时间50分钟

        task2 1:00执行,(为task1预留10分钟bufffer),经验执行时间也是50分钟

        task3 2:00执行,为task2预留10分中buffer

  这种做法有明显的坏处:

  • 如果有一个任务的执行超过了预留的buffer时间,将会得到错误的结果,因为后置任务不清楚前置任务是否执行成功,此时要手动重跑任务,有可能要重排任务执行时间表。
  • 总任务的执行时间很长,总是预留很多buffer,如果前置任务提前完成,后置任务不会提前开始。
  • 如果一个任务被多个任务依赖,这个任务将会成为关键路径,排班表很难体现依赖关系,容易出错。
  • 如果有一个任务的执行时间要调整,将会有多个任务的执行时间要调整。

优化方案是采用MQ解耦

1)task1准时开始,结束后发一个"task1 done"的消息

2)task2订阅"task1 done"的消息,收到消息后的第一时间启动执行,结束后发一个"task2 done"的消息

3)task3同理

采用MQ的优点:

1)不需要预留buffer,上游任务执行完,下游任务会在第一时间被执行

2)依赖多个任务,被多个任务依赖都很好处理,只需要订阅相关消息即可

3)有任务执行时间变化,下游任务都不需要调整执行时间

需要特别说明的是MQ只用来传递上游任务执行完成的消息,并不用于传递真正的输入输出数据


2 典型应用场景二



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值