问题1 为什么要用消息队列呀?
答:如下图所示,外呼系统需要将外呼结果发送给业务系统,如果采用rpc的调用方式;则带来的后果, 首先,1、外呼系统与业务系统严重耦合,多个业务系统需要外呼系统传输数据,如果有接口调用的方式,那无论是接入新的业务还是撤掉业务,都需要改动代码;
2、如果业务系统挂掉/访问超时,要保证不能影响其他业务系统;所以:需要利用消息队列解耦,这样做的好处:外呼系统和业务系统解耦,业务系统有需要,消费mq即可 外呼系统也无需关注业务系统的消费情况啦其次,如果采用rpc调用方式(同步),则总体耗时 = 在外呼系统的耗时 + 在审核系统的耗时 + 在天网的耗时。。总体耗时过长, 使用mq异步化之后,性能优化啦,总耗时 = 外呼系统的耗时 + 发送mq的耗时。
再次,如果不用mq,高峰期的时候,大量请求打入系统,万一系统的处理逻辑涉及到数据库,那么很容易挂掉,高峰期一过,系统压力又大大减小。 所以使用mq削峰,系统慢慢从mq中拉取数据作处理,保证高峰期系统也不会挂掉,虽然有可能堆积消息,但是高峰期一过,请求就会被快速处理掉的。
问题2 消息队列的优点和缺点?
优点:如1所说,可以解耦、低耗时、削峰 缺点:
(1)、系统的可用性降低,mq一旦挂掉,提供者没办法发送消息了,消费者也无法接收到数据了
(2)、系统的复杂性提高,引入了mq,就要考虑消息重复、消息幂等、消息丢失、消息延迟、消息堆积、消息顺序错乱等问题
(3)、系统的一致性问题,如果消费失败,那么有可能导致提供者与消费者