我们为什么使用ActivityMQ?如何使用MQ的特性?

在说明为什么使用activityMQ之前,我先说一说为什么使用MQ?

MQ(Message Queue):消息队列,队列,一种先进先出的数据格式,就如去食堂买饭,先去的排在前面,那么食堂的阿姨会先给排在前面的小哥哥小姐姐打饭(所以吃饭要积极点,不然就没得吃了)

          在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,逻辑上和物理上都不用依赖其他服务。

为什么使用MQ?

  比如我们常见的下单支付系统中:往往在用户支付成功后,需要给你用户推送各种消息(短信、微信模板消息,以及物流通知等消息);如果在我们支付成功时,去分别调用发短信,法模板消息,发物流通知,那么会

  使得我们的系统的健壮性和性能大大降低,我们从下面几个点来说。

  1、容错:那么容错来说也比较麻烦,比如调用短信时,短信的服务挂掉了,那么我们应该重试呢?还是忽略(不可取的);如果某个推送消息处理出现错误,那么数据可能没有更新,造成数据的误差

  2、性能:如果我们不停的尝试某一个服务,那么响应的时间就会非常长,甚至超时,这样会使得用户的体验感非常差;

  3、解耦:如果现在有一个新的需求,需要再给用户发邮件;那么势必又要在支付回调中处理发邮件的逻辑;这样我们的系统就会像蜗牛一样

  4、消峰:如果某个活动峰值较大,每个请求都要完成全部操作,那么就会造成各种问题(内存不够,响应时间超时等),那么只需要将接口数据丢到MQ,又消费者去处理,这样就大大缩减了时间

  此时,我们就可以使用MQ来解决问题了;MQ可以把上述的问题拆分成:回调时作为生产者推送消息到MQ; 就算完成任务,至于剩下的发消息,该状态等操作,在消费者中消费数据

MQ消费方式有两种:

  Queue(点对点的消费):当生成者把消息推送到MQ时,只要有一个消费者消费过改数据,那么就会把此数据从MQ中移除

  Topic(订阅模式的消费):当生成者把消息推送到MQ时,所有订阅的消费者都消费过该数据后,那么才会把此数据从MQ中移除

为什么使用ActivityMQ?

  

猜你喜欢

转载自www.cnblogs.com/wangshunyao/p/10709869.html