场景:
1.异步处理
注册信息写入数据库——写入消息队列后直接返回 注册成功
邮件和短信再发送
节省了用户收到注册成功提示的时间。
2.应用解耦
两种 系统单独抽取出来
只要消息队列中有内容,库存系统就收到消息进行计算。
3.流量削峰
秒杀时, 设置消息队列最大上限人数
一旦达到上限关闭,直接返回秒杀失败,节省等待时间。
知识点:
消息代理:消息中间件的服务器
- 目的地:队列(queue):点对点消息通信(point-to-point)
- 主题(topic):发布(publish)/订阅(subscribe)消息通信
两种模式:
1.点对点:
A——消息队列(queue)——B/C/D
发送者唯一,B,C,D需主动取
消息一旦被B取出后 消息删除 ,C,D无法取
2.发布订阅:
A——消息主题(topic)——B/C/D
B,C,D监听
A的消息到达topic时。
B,C,D同时收到消息
消息代理规范:
JMS(Java Message Service)JAVA消息服务:
ActiveMQ、HornetMQ是JMS实现
AMQP (Advanced Message Queuing Protocol)高级消息队列协议 可以兼容JMS
RabbitMQ是AMQP的实现
Spring支持:
- spring-jms提供了对JMS的支持
- spring-rabbit提供了对AMQP的支持
- 需要ConnectionFactory的实现来连接消息代理
- 提供JmsTemplate、RabbitTemplate来发送消息
- @JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上监听消息代理发布的消息
- @EnableJms、@EnableRabbit开启支持
Spring Boot自动配置:
- JmsAutoConfiguration
- RabbitAutoConfiguration