您的位置:首页 > 其它

消息队列应用场景

2018-02-10 12:26 274 查看
消息队列(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 典型应用场景二
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: