能够说出什么是消息队列;为什么使用消息队列;常见产品有哪些
MQ (message Queue)
消息队列是程序与程序之间的通讯方法,
无需即时返回且耗时的操作,进行一部处理,而提高程序系统的吞吐量,
1.异步处理,提高系统的吞吐量
2.应用程序解耦合
使用场景
一开始我们可能只需要非常简单的一个web页面,然后调用成单系统,紧接着扣减库存,最后存到db即可
后来每次交易,还要通知搜索系统,推荐系统,广告结算系统,商家后台等等等
实现方式:
AMQP,JMS
常见的产品:activeMQ,zeroMQ,RabbitMQ,kafka
AMQP协议
AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议。
AMQP模型:
工作过程
发布者(Publisher)发布消息(Message),经由交换机(Exchange)。
交换机根据路由规则将收到的消息分发给与该交换机绑定的队列(Queue)。
最后 AMQP 代理会将消息投递给订阅了此队列的消费者,或者消费者按照需求自行获取。
消息确认机制
AMQP 模块包含了一个消息确认(Message Acknowledgements)机制:当一个消息从队列中投递给消费者后,不会立即从队列中删除,直到它收到来自消费者的确认回执(Acknowledgement)后,才完全从队列中删除。
死信队列
在某些情况下,例如当一个消息无法被成功路由时(无法从交换机分发到队列),消息或许会被返回给发布者并被丢弃。或者,如果消息代理执行了延期操作,消息会被放入一个所谓的死信队列中。此时,消息发布者可以选择某些参数来处理这些特殊情况。
协议深入理解
安装配置rabbitmq:
使用
springboot 的maven工程支持amqp相关依赖,Spring Boot提供了对于AMQP的整合;可以使用RabbitTemplate发送消息;可以使用@RabbitListener注解接收消息。
在springboot项目中
生产者:发送消息到RabbitMQ队列(simple_queue)
消费者:接收RabbitMQ队列消息
在springboot项目中创建生产者,把要处理的消息,发送到消息队列
在springboot中创建消费者(@RabbitListener)接收并处理消息
RabbitMq分类
1. 不直接使用exchange交换机(使用default exchange)
simple模式:一个生产者产生消息被 一个消费者接收
work工作队列模式:生产者发送消息,多个消费者监听接收,一个消息只能被一个消费者竞争接收
2.使用exchange交换机:订阅模式(广播fanout、定向direct、通配符topics)
1.发布与订阅模式:使用了fanout交换机,可以讲一个消息发给所有绑定该交换的队列
2.路由模式:使用了derect交换机,消息携带路由key,匹配路由key相同的队列接收
3.通配符:使用了topics交换机,消息携带路由key(#,*),匹配通配符路由key相同的队列接收