消息队列

维基百科,自由的百科全书
跳转至: 导航搜索

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

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

实现[编辑]

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

目前,有很多消息队列有很多开源的实现,包括JBoss MessagingJORAMApache ActiveMQSun Open Message QueueApache Qpid[3]和HTTPSQS。[4]

优缺点[编辑]

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

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

参考资料[编辑]

  1. ^ Sean A. Walberg. 使用UNIX System V IPC机制共享应用程序数据. IBM. 2007-03-15. "消息队列非常独特,因为两个进程不必同时存在:一个进程可以发送一个消息并退出,而该消息可以在数天后才被另一个进程获得。" 
  2. ^ 郑彦兴(mlinux@163.com). Linux环境进程间通信(三). IBM. 2003-01-17. "消息队列就是一个消息的链表。" 
  3. ^ Apache Qpid Project, an implementation of AMQP.
  4. ^ HTTPSQS, an message queue based on HTTP GET/POST protocol.
  5. ^ 郑彦兴(mlinux@163.com). Linux环境进程间通信(三). IBM. 2003-01-17. "它提供有格式字节流,有利于减少开发人员的工作量"