ActiveMq相关认识

ActiveMq是一个消息队列中间件,类似的还有RabbitMQ、Kafka等。

ActiveMq的优点或者作用

解耦

  • 在大型网站中最常见使用消息中间件,能降低应用的耦合度。
    比如:在订单系统和库存系统中引入消息中间件,如果用户下单成功后,库存系统刚好发生宕机故障,也不会影响数据,因为下单成功后,已经把减库存的操作持久化告诉ActiveMq,ActiveMq会在库存系统恢复正常的时候提醒写入数据到库存系统。

    流量消峰(解决高并发场景)

  • 没有中间件的之前,在整点秒杀和抢购活动中,大量的同一请求会同时对数据库进行CRUD操作。因为ActiveMq是先进先出,所以当有大量同求时,先经过ActiveMq把请求集中起来统一管理,采用定义好的规则把请求分批处理。这样就能直到保护数据库的作用。
    上面所说规则可理解为,500个商品,100000个抢购请求,那么ActiveMq就会把所有的请求先集中处理,前500个先进先出,500之后的就抢购失败,不经过数据库处理,直接抛弃用户请求或跳转到抢购失败页面提示用户抢购失败。
    ps:解耦这个特定业务环境下是使用发布-订阅模式

    异步处理

  • 将不是很重要的业务逻辑进行异步处理,比如注册功能,传统的注册功能要在完成发送注册邮件和注册短信后才响应给前端,这样显得有点慢,因为邮件和短信提示不算是很重要,可以在响应给用户后慢一点点发邮件和短信提示,所以我们可以把这两个部分都交给ActiveMq来异步处理。
    具体可以看这篇博客戳这里有图文,更易理解

ActiveMq的两种消息模型

ptp(点到点模型)

  • 生产者和消费者一对一关系,消息保证送达,离线消费者可以在下次上线后收到之前积压的消息。

    p/s(发布/订阅模型)

  • 生产者和消费者一对多关系,一个消息生产者可以被多个消费者订阅消费。类似关注微信公众号一样,在你关注公众号前,公众号发布的文章,你是不能接收到推送的。只有你订阅后,公众号推送的文章你才能收到提醒。

    p/s普通订阅

  • 当没有持久订阅者和在线的普通订阅者,消息不会保存,普通订阅者上线后也收不到该消息。

    p/s持久订阅

  • 如果有离线的持久订阅者,ActiveMq会为该持久订阅者保存消息,当该持久订阅者上线后,会收到消息。