一、什么是AMQP
SpringAmqp的官方地址:https://spring.io/projects/spring-amqp
二、Basic Queue 简单队列模型
总结:
1. 什么是AMQP?
应用间消息通信的一种协议,与语言和平台无关。
2. SpringAMQP如何发送消息?
(1)引入amqp 的starter 依赖
(2)配置RabbitMQ 地址
(3)利用RabbitTemplate 的convertAndSend 方法
总结:
SpringAMQP如何接收消息?
(1)引入amqp 的starter 依赖
(2)配置RabbitMQ 地址
(3)定义类,添加@Component 注解
(4)类中声明方法,添加@RabbitListener 注解,方法参数就时消息
注意:消息一旦消费就会从队列删除,RabbitMQ 没有消息回溯功能
三、Work Queue 工作队列模型
消费预取限制
总结:
Work模型的使用:
1. 多个消费者绑定到一个队列,同一条消息只会被一个消费者处理
2. 通过设置prefetch 来控制消费者预取的消息数量
四、发布( Publish )、订阅( Subscribe )
注意:exchange负责消息路由,而不是存储,路由失败则消息丢失
五、发布订阅-Fanout Exchange
总结:
1. 交换机的作用是什么?
(1)接收publisher 发送的消息
(2)将消息按照规则路由到与之绑定的队列
(3)不能缓存消息,路由失败,消息丢失
(4)FanoutExchange 的会将消息路由到每个绑定的队列
2. 声明队列、交换机、绑定关系的Bean是什么?
(1)Queue
(2)FanoutExchange
(3)Binding
六、发布订阅-DirectExchange
总结:
1. 描述下Direct 交换机与Fanout 交换机的差异?
(1)Fanout 交换机将消息路由给每一个与之绑定的队列
(2)Direct 交换机根据RoutingKey 判断路由给哪个队列
(3)如果多个队列具有相同的RoutingKey,则与Fanout 功能类似
2. 基于@RabbitListener注解声明队列和交换机有哪些常见注解?
(1)@Queue
(2)@Exchange
七、发布订阅-TopicExchange
总结:
描述下Direct交换机与Topic交换机的差异?
(1)Topic交换机接收的消息RoutingKey必须是多个单词,以 . 分割
(2)Topic交换机与队列绑定时的bindingKey可以指定通配符
(3)#:代表0个或多个词
(4)*:代表1个词
八、SpringAMQP-消息转换器
总结:
SpringAMQP中消息的序列化和反序列化是怎么实现的?
(1)利用MessageConverter实现的,默认是JDK的序列化
(2)注意发送方与接收方必须使用相同的MessageConverter