可以做问答的网站河南网站优化
文章目录
- 简介
- 核心概念
- 工作流程
- 阻塞队列的实现
- 消息队列的优点
简介
消息队列 (Message Queue, MQ) 是一种在分布式系统中用于异步通信的中间件。它允许不同应用程序或服务通过发送消息与接收消息交换数据,而且无需直接相互依赖
核心概念
生产者:负责创建并发送消息到消息队列
消息队列:储存消息的缓冲区,基于阻塞队列的实现基底
消费者:从消息队列接收消息并执行
工作流程
1.生产者将消息发送到消息队列。
2.消息队列存储消息,直到有消费者准备好处理它。
3.消费者从消息队列中获取消息并进行处理。
4.处理完成后,消费者可以确认消息已被成功处理,消息队列将其删除。
阻塞队列的实现
public class MyBlockingDeque {private int[]elem;public MyBlockingDeque(int space) {if(space<=0) {throw new RuntimeException();}else elem=new int[space];}private volatile int head=0;//头下标private volatile int tail=0;//尾下标private volatile int size=0;//数组有效个数public void put(int value) throws InterruptedException {synchronized (this) {if (size >= elem.length) {//阻塞,使其等待 this当前这个this.wait();}elem[tail] = value;tail++;if (tail == elem.length) {tail = 0;}size++;}}public synchronized Integer take() throws InterruptedException {if(size==0){this.wait();}Integer key=elem[head];head++;if(head==elem.length){head=0;}size--;//唤醒阻塞等待线程this.notifyAll();return key;}
}
消息队列的优点
1.解耦:生产者与消费者之间不需要直接了解对方,降低了系统之间的依赖性
2.异步:生产者发送消息不需要等消费者执行完,提高了系统的响应速度
3.削峰填谷:在高并发下,消息队列可以缓冲请求,防止系统过载
4.可靠性:消息队列通常具有持久化机制,可以保证消息不会丢失
5.可以方便地增加生产者和消费者,扩展系统的处理能力。
6.某些消息队列可以保证消息的顺序性,即按照发送的顺序进行处理。