ActiveMQ

/ Java / 0 条评论 / 916浏览

队列的主要作用是消除高并发访问高峰,加快网站的响应速度。在不使用消息队列的情况下,用户的请求数据直接写入数据库,在高并发的情况下,会对数据库造成巨大的压力,同时也使得系统响应延迟加剧。
在使用队列后,用户的请求发给队列后立即返回(当然不能直接给用户提示订单提交成功,京东上提示:您“您提交了订单,请等待系统确认”),再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。

https://github.com/1181888200/activeMQ git源码
https://blog.csdn.net/lovelong8808/article/details/52235132 生产+web
https://blog.csdn.net/LOVELONG8808/article/details/52277029 消费 + broadcase
http://blog.csdn.net/lovelong8808/article/details/52212566 websocket + pull web(restapi) ------->mq 生产消息【sendMessage】 ----> mq websocket (前端) ------> broadcast[MessageListener]消费消息 <---- mq 接受消息的方式

1.死循环接收消息

 messageConsumer = session.createConsumer(destination);// 创建消息消费者
/* * 实际应用中,不会这么用,会注册一个监听 */
while (true) {
     TextMessage textMessage = (TextMessage) messageConsumer.receive(100000);
     if (textMessage != null) {
          System.out.println("收到的消息:" + textMessage.getText());
     } else {
          break;
     }
} 

2.p2p - MessageListener ![Message-listener][1]

应用场景: 流量削锋:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。
a、可以控制活动的人数。
b、可以缓解短时间内高流量压垮应用 在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量

[1]: http://blog.jasonsky.com.cn/upload/2018/12/4827k4puhmgqvp48llu3dddcmn.png