什么是SpringAMQP
- SpringAMQP的官方地址:https://spring.io/projects/spring-amqp
- AMQP(Advanced Message Queuing Protocol):是用于在应用程序或之间传递业务消息的开放标准。该协议与语言和平台无关,更符合微服务中独立性的要求。
- Spring AMQP:Spring AMQP是基于AMQP协议定义的一套API规范,提供了模板来发送和接收消息。包含两部分,其中spring-amqp是基础抽象,spring-rabbit是底层的默认实现。
1 Basic Queue 简单队列模型
SpringAMQP如何发送消息?
- 引入amqp的starter依赖;
- 在发送端服务中配置RabbitMQ地址;
- 利用RabbitTemplate的convertAndSend方法
SpringAMQP如何接收消息?
- 引入amqp的starter依赖;
- 配置RabbitMQ地址;
- 定义类,添加@Component注解;
- 类中声明方法,添加@RabbitListener注解,方法参数就时消息
- 注意:消息一旦消费就会从队列中删除,RabbitMQ没有消息回溯功能。
2 Work Queue 工作队列模型
Work模型的使用:
- 多个消费者绑定到一个队列,同一条消息只会被一个消费者处理;
- 通过设置prefetch来控制消费者预取的消息数量。
3 发布、订阅模型-Fanout
注:exchange(交换机)负责消息路由,而不是存储,路由失败则消息丢失。
Fanout Exchange会将接收到的消息路由到每一个跟其绑定的queue。
交换机的作用:
- 接收publisher发送的消息;
- 将消息按照规则路由到与之绑定的队列;
- 不能缓存消息,路由失败,消息丢失;
- FanoutExchange的会将消息路由到每个绑定的队列。
声明队列、交换机、绑定关系的Bean是什么?
- Queue
- FanoutExchange
- Binding
4 发布、订阅模型-Direct
Direct Exchange 会将接收到的消息根据规则路由到指定的Queue,因此称为路由模式(routes)。
- 每一个Queue都与Exchange设置一个BindingKey;
- 发布者发送消息时,指定消息的RoutingKey;
- Exchange将消息路由到BindingKey与消息RoutingKey一致的队列;
Direct 交换机 与 Fanout交换机的差异
- Fanout交换机将消息路由给每一个与之绑定的队列;
- Direct交换机根据RoutingKey判断路由给哪个队列;
- 如果多个队列具有相同的RoutingKey,则与Fanout功能相似。
基于@RabbitListener注解声明队列和交换机有哪些常见注解?
- @Queue
- @Exchange
5 发布、订阅模型-Topic
TopicExchange 与 DirectExchange类似,区别在于routingKey必须是多个单词的列表,并且以.分割。
Queue 与 Exchange指定BindingKey时可以使用通配符:
- #:代表0个或多个单词;
- *:代指一个单词
6 消息转换器
SpringAMQP中消息的序列化和反序列化是怎么实现的?
- 利用MessageConverter实现的,默认是JDK的序列化;
- 注意发送方与接收方必须使用相同的MessageConverter。
标签:SpringAMQP,十三,Queue,队列,交换机,消息,路由 From: https://www.cnblogs.com/daytoy105/p/17960406