ActiveMQ实现消息队列

参考资料:

      https://baike.baidu.com/item/%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/4751675?fr=aladdin

      https://blog.csdn.net/kingcat666/article/details/78660535

      https://www.cnblogs.com/jaycekon/p/6220200.html

      https://blog.csdn.net/liuyuanq123/article/details/79109218

一.消息队列的概念

   消息队列是在消息传输的过程中保存消息的容器。消息队列是存在内核中的消息链表,只有在内核重启或显示的删除一个消息队列时,才会真正被删除。可以把消息看做一个记录,具有特定的格式以及特定的优先级(消息协议)。对消息有写权限的进程可以按规则添加消息,对消息有读权限的进程可以从消息队列中读走消息。

二.消息队列的主要应用场景

主要应用于异步处理,流量削峰,应用解耦和消息通讯四个场景。

2.1 异步处理

对时效性要求不高,比如拷贝产品模型时,若采用同步机制,由于模型过多或过大,页面可能会卡死,这时候采用消息队列进行后续的异步处理,效果就会好很多。

2.2  流量削峰

常见的就是电商的秒杀活动,一般会由于访问量突然增加,导致服务器压力过大甚至挂掉,这时候可以在应用前段加入消息队列来缓解服务器压力。

2.3 应用解耦

在分布式系统中,A系统需要通过B系统进行后续流程的处理,按照传统的方式,就是A系统调用B系统的接口来实现,假设B系统出问题,A系统的相关功能完全不能用,耦合性过大。如果引入消息队列,A系统将后续的处理直接发消息给消息队列,B系统随时可以去消息队列中获取并进行消息处理。

2.4 消息通讯

            消息队列有两种消息模式,分别是点对点和发布订阅模式。

三.JMS的概念

JMS即java消息服务接口(Java Message Service),是一个java平台中关于面向消息中间件的API,用于在应用程序间或分布式系统间进行消息通讯。

JMS具有异步和可靠两个优势,可靠是指JMS保证消息只会传递一次。

JMS的两种通信模式:点对点和发布订阅模式

3.1 点对点通信模式(Point-to-Point Messaging Domain)

由消息队列、发送方和接收方三部分组成。特点:

1.每个消息只有一个消费者

2.发送者和消费者没有时间上的约束

3.接收方在接受完消息后,需要向消息队列应答成功

3.2 发布/订阅通信模式

发布者发布一个消息,通过Topic传递给所有的客户端。该模式下,发布者和订阅者都是匿名的,并且可以动态的发布和订阅Topic,Topic用于保存和传递消息,且会一直保存消息直到消息被传递给客户端。特点:

1.一个消息可以有多个订阅者

2.发布者与订阅者具有时间约束,针对某个Topic的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,且必须保持运行的状态

3.为了缓和时间约束,JMS允许订阅者可创建一个持久化的订阅。这样,即使订阅者没有激活,它也能接收到发布者的消息。

四.JMS编程模型

五.ActiveMQ实现消息队列

MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。 
特点: 
1、支持多种语言编写客户端 
2、对spring的支持,很容易和spring整合 
3、支持多种传输协议:TCP,SSL,NIO,UDP等 
4、支持AJAX 
消息形式: 
1、点对点(queue) 
2、一对多(topic) 

5.1 点对点

Producer

Consumer

5.2 发布订阅模式

猜你喜欢

转载自blog.csdn.net/sunjian1122/article/details/81415356