1.activemq消息队列的作用(可参考 https://blog.youkuaiyun.com/qinweili751/article/details/80620104,比较全面)
简单的总结一下,
1.1应用解耦:作为消息中间件,可独立处于两个不同系统或者应用中间,通过类似存取模式达到应用解耦
1.2异步处理:加快响应速度,同步要求所有逻辑和操作执行完毕返回结果,而异步及大大提高响应速度,逻辑和操作异步处理,不用执行完毕直接返回结果
1.3流量削峰:常见的秒杀系统.空置消息队列长度,在高流量高并发情况下空置请求数量,达到维护系统和数据库正常运行效果,比如有10000台手机10点开抢,消息队列限制最大长度为10000,当你第10001个请求时就会返回给你一个已无货是一个道理
1.4通讯:通过订阅收到消息,也可以通过点对点模式收发消息,可用于聊天等
2.activemq常见的两种模式
2.1:点对点 :就像快递,快递员要给你送货,你要收快递,中间存在一张快递单,快递员通过快递单找到你,你通过快递单找到你的货品,而快递单就类似消息队列的队列名,一个发布,一个消费.
2.2发布/订阅模式:最简单的例子,看过直播的朋友应该知道,你订阅了某个主播,在该主播开播的时候都会收到一条提醒,某某主播开播了,订阅的人都会收到,没有订阅的就不会收到,同样的模式消息队列发布消息,订阅者都会接收到,而没有订阅的则不会(rabbitmq模式更多一点,有空可以去了解一下)
3.springboot+activemq
这点不多说,用过springboot的都能体会,加个依赖,写个配置就欧克了
4.实战demo(点对点模式)
4.1:添加依赖
4.2:配置(详细配置自己去找,模式不一样,配置也不同)
4.3实现,发送消息+redis
4.4:接收消息
点对点之所以用到redis,是因为遇到一种情况,单纯的收发消息完全没有问题,但是我的消息队列是写在微信支付回调里,且异步发送过去操作好几张表,这样就遇到会重复接收同一条消息队列,对数据库做重复操作,翻看各种文章,没能找到解决办法,老大结合redis解决了这个问题