Overview
Message queues provide an asynchronous communications protocol, meaning that the sender and receiver of the message do not need to interact with the message queue at the same time. Messages placed onto the queue are stored until the recipient retrieves them. Message queues have implicit or explicit limits on the size of data that may be transmitted in a single message and the number of messages that may remain outstanding on the queue.
Many implementations of message queues function internally: within an operating system or within an application. Such queues exist for the purposes of that system only.
Other implementations allow the passing of messages between different computer systems, potentially connecting multiple applications and multiple operating systems. These message queueing systems typically provide enhanced resilience functionality to ensure that messages do not get "lost" in the event of a system failure. Examples of commercial implementations of this kind of message queueing software (also known as message-oriented middleware) include IBM's WebSphere MQ (formerly MQ Series) and Oracle Advanced Queuing (AQ). There is a Java standard called Java Message Service, which has several proprietary and free software implementations.
Implementations exist as proprietary software, provided as Message Queuing as a Service, as open source software, or be hardware-based.
Proprietary options have the longest history, and include products from the inception of Message Queuing, such as IBM's WebSphere MQ (formerly MQ Series), and those tied to specific operating systems, such as Microsoft Message Queuing.
Message Queuing as a Service options, such as StormMQ or IronIO, exist.
There are a number of open source choices of messaging middleware systems, including JBoss Messaging, JORAM, Apache ActiveMQ, Sun Open Message Queue, Apache Qpid, RabbitMQ, Beanstalk'd, Tarantool and HTTPSQS
In addition to open source systems, hardware-based messaging middleware exists with vendors like Solace Systems, Sonoa / Apigee and Tervela offering queuing through silicon or silicon/software datapaths.
Most RTOSes, such as VxWorks and QNX operating systems encourage the use of message queueing as the primary IPC or inter-thread communication mechanism. The resulting tight integration between message passing and CPU scheduling is attributed as a main reason for the usability of RTOSes for real time applications. Early examples of commercial RTOSes that encouraged a message-queue basis to inter-thread communication also include VRTX and pSOS+, both of which date to the early 1980s.
Read more about this topic: Message Queue