SpringBoot整合消息
消息队列
MQ(Message Queue)消息队列,是基础数据结构中先进先出的一种数据结构,指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递,生产者生产消息并把消息放入队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者定义相应的队列,由MQ服务端给其推送消息。
MQ作用
1、流量消峰
在大量请求时(秒杀场景),使用消息队列做缓冲处理,削弱峰值流量,防止系统在短时间内被峰值流量冲垮。
2、应用解耦
使用消息MQ后,只需要保证消息格式不变,不需要关系发布者及消费者之间的关系,这两者不需要被彼此联系
3、异步处理
对于消息的生产者与消费者的工作模式,还可以将消息划分成两种模式,同步消费与异步消息。
Java处理消息的规则
目前企业级开发中广泛使用的消息处理技术共三大类,具体如下:
- JMS
- AMQP
- MQTT
这些都是规范,就像JDBC技术,是个规范,开发针对规范开发,运行还有靠实现类,例如MySQL提供了JDBC的实现,最终运行靠的还是实现,并且这三类规范都是针对异步消息进行处理的。也符合消息的设计本质,处理异步的业务。
JMS
JMS(Java message Service),这时一个规范,作用等同于JDBC规范,提供了与消息服务相关的API接口。
JMS消息模型
JMS规范中规范了消息由两种模型:点对点模型 和发布订阅模型
点对点模型:peer-2peer,生产者会将消息发送到一个保存消息的容器中,通常使用队列模型,使用队列保存消息。一个队列的消息 只能被一个消费者消费,或者未被消费导致超时。这种模型下,生产者和消费者是一对一绑定的。
发布订阅模型:publish-subscribe,生产者将消息发送到一个保存消息的容器中,也是使用队列模型保存,但是消息可以被多个消费 者消费,生产者和消费者完全独立,相互不需要感知对方的存在。
以上这种分类是从消息的生产和消费过程来区分,针对消息所包含的信息不同,还可以进行不同类别的划分。
JMS消息种类
根据消息中包含的数据种类划分,可以将消息划分成6种消息。
- TextMessage
- MapMessage
- ByteMessage
- StreamMessage
- ObjectMessage
- Message(只有消息头和属性)
JMS主张不同种类的消息,消费方式不同,可以根据使用需要选择不同种类的消息,例如:ActiveMQ、Redis、HornetMQ。但是也 有一些不太规范的实现。参考JMS的标准设计,但是又不完全满足其规范,例如:RabbitMQ、RocketMQ。
AMQP
<