消息队列

在计算机科学中，消息队列（）是一种进程间通信或同一进程的不同线程间的通信方式，軟體的貯列用來處理一系列的輸入，通常是來自使用者。消息队列提供了异步的通信协议，每一個貯列中的紀錄包含詳細說明的資料，包含發生的時間，輸入裝置的種類，以及特定的輸入參數，也就是说：消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中，直到接收者取回它。

一個 WIMP 環境像是 Microsoft Windows，藉由優先的某些形式（通常是事件的時間或是重要性的順序）來儲存使用者產生的事件到一個 事件貯列 中。系統把每個事件從事件貯列中傳遞給目標的應用程式。

实现
实际上，消息队列常常保存在链表结构中。拥有权限的进程可以向消息队列中写入或读取消息。

目前，有很多消息队列有很多开源的实现，包括JBoss Messaging、JORAM、Apache ActiveMQ、Sun Open Message Queue、RabbitMQ、IBM MQ、Apache Qpid、Apache RocketMQ和HTTPSQS。

优缺点
消息队列本身是异步的，它允许接收者在消息发送很长时间后再取回消息，这和大多数通信协议是不同的。例如WWW中使用的HTTP协议（HTTP/2之前）是同步的，因为客户端在发出请求后必须等待服务器回应。然而，很多情况下我们需要异步的通信协议。比如，一个进程通知另一个进程发生了一个事件，但不需要等待回应。但消息队列的异步特点，也造成了一个缺点，就是接收者必须轮询消息队列，才能收到最近的消息。

和信号相比，消息队列能够传递更多的信息。与管道相比，消息队列提供了有格式的数据，这可以减少开发人员的工作量。但消息队列仍然有大小限制。

消息队列除了可以當不同线程或进程間的緩衝外，更可以透過消息队列當前訊息數量來偵測接收线程或进程效能是否有問題。

参考资料

X
X
X
X
X