java 阻塞队列特点(Java高级消息队列的应用场景)
java 阻塞队列特点(Java高级消息队列的应用场景)
上一篇 Java消息队列总结总结了所有消息队列的知识点,本文章将带领读者来学习消息队列的应用场景
消息队列的主要特点就是异步处理,这样做的好处就是解藕和减少请求时间。- 多个应用之间的解藕;
- 多个应用之间的耦合,由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口。基于消息队列的耦合,甚至不需要发送方和接收方同时在线。
- 如:下订单的过程,要从订单系统下订单,同时到库存系统去库存。
- 应用内的同步行为变异步;
- 如:用户注册的过程,写完数据库后,发邮件、发短信通知等行为其实都不是用户关心的必要行为,都可以通过消息队列变成异步行为。
- 发布订阅:做一对一或者一对多的广播,甚至是制定路由规则。
- 任务分发:消息发送即“布置工作”,消息接收即“处理任务”。多个消息接收者分布式部署,提升应用并发效率及可用性。
- 确认反馈:
- 在消息驱动的架构下,系统分解为消息队列,和消息制造者和消息消费者,一个处理流程可以根据需要拆成多个阶段,阶段之间用队列连接起来,前一个阶段处理的结果放入队列,后一个阶段从队列中获取消息继续处理。
- 将逻辑通过消息队列解藕时,可能会带来数据不一致性,有的是短暂的,原来是沉重的数据库事务去做的话,需要有一定的“补偿“机制……
- 可持久化:当机的情况下用的到。
比如订单处理,就可以由前端应用将订单信息放到队列,后端应用从队列里依次获得消息处理,高峰时的大量订单可以积压在队列里慢慢处理掉。由于同步通常意味着阻塞,而大量线程的阻塞会降低计算机的性能。