生产者消费者模式的使用场景和作用
- 业务解耦:产者负责生产任务丢给队列,消费者负责从队列中获取任务做逻辑
- 削峰:串行的业务往往会导致服务夯住,如果采用生产者消费者,消费者负责将业务丢给队列即可返回,消费者可独立扩容多个来负责消费任务
消费者模式的几种实现
批量消费
我们可以从队列中一个个的消费任务,但是在某些场景下我们其实批量的执行任务会更提高效率,比如异步写入数据的逻辑,一条条会建很多链接,我们可以一次拉取N个任务一次执行,代码如下
1 | public class BatchQueue<T> { |
俩阶段提交
之前讨论Mysql的时候,我们提到过Mysql脏页的俩阶段提交,我们也可以使用消费者模式来实现
1 | private LinkedBlockingQueue<T> queue = new LinkedBlockingQueue<>(); |