1. 大多应用中,可以通过消息服务中间件来提升系统异步通信、扩展解耦合能
2. 消息服务中两重要多概念
- 消息代理(message broker)
- 目的地(destination)
当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。
3. 消息队列主要有两种形式到目的地
- 队列(queue): 点对点消息通信(point-to-point)
- 主题(topic): 发布(publish)/ 订阅(subscribe)消息通信
4. 点对点
- 消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容,消息读取后被移除队列
- 消息只有唯一到发送者和接受者,但并不是说只能有一个接受者
5. 发布订阅式
- 发送者 (发布者)发送消息到主题,多个接受者(订阅者)监听(订阅)这个主题,那么就会在消息到达时同时收到消息
6. JMS(Java Message Service)JAVA消息服务
- 基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现
7. AMQP(Advanced Message Queuing Protocol)
- 高级消息队列协议,也是一个消息代理的规范,兼容JMS
- RabbitMQ是AMQP的实现
8. Spring支持
- spring-jms提供两对JMS的支持
- spring-rabbit提供了对AMQP的支持
- 需要ConnectionFactory的实现来连接消息代理
- 提供JmsTemplate、RabbitTemplate来发送消息
- @JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上监听消息代理发布的消息
- @EnableJms、@EnableRabbit开启支持
9. Spring Boot自动配置
- JmsAutoConfiguration
- RabbitAutoConfiguration
作用:
通过消息服务中间件来提升系统异步通信、扩展解耦能力
当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地
应用场景:
1.异步处理
用户注册操作和消息处理并行,提高响应速度
image.png
2.应用解耦合
image.png在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦
3.流量削峰
用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面
秒杀业务根据消息队列中的请求信息,再做后续处理
image.png
网友评论