微服务技术栈(十一) - MQ(SpringAMQP)
一、什么是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
下一篇:
微服务理论与实践(五)-微服务之间的交互