RabbitMQ是一种消息中间件:简单来说,它可以负责接收和发送消息。你可以把RabbitMQ想象成是一个邮局:当你想寄一封信的时候你会把信放进邮箱里,因为你确信邮递员会帮你把这封信送到收件人的手中。在这个比喻中,RabbitMQ扮演的就是邮箱,邮局和邮递员这样的角色。
要说起RabbitMQ和邮局最大的不同,那应该是MQ并不是处理纸质信息,取而代之的是负责接收,存储和发送二进制数据块——或者是我们常说的 “消息” 。
通常来讲,我们谈到RabbitMQ或者说消息中间件时会使用一些行话,我们在此先了解一下:
生产意味着只进行发送工作,所以一个发送消息的程序我们称之为生产者。
队列我们可以看作是在RabbitMQ中充当着邮箱的角色。虽然消息流在RabbitMQ和应用间传输,但是消息只能保存在队列中。队列仅仅受限于host主机的内存和硬盘的大小,本质上是一个大的消息缓冲区。多个生产者可以给一个队列发送消息,而一个队列也可以被多个消费者消费。队列的图示如下:
消费和接收有着相似的含义,所以消费者就是指那些主要负责等待接收消息的应用
值得注意的是,生产者、消费者和中间件不是一定要部署在同一台主机上;事实上,在大多数应用当中都不会部署在同一台机器上,而且一个应用程序既可以是生产者,也可以是消费者。
Hello World!
接下来我们将会使用Java写两个小程序,一个是模拟生产者发送消息,另一个模拟消费者接收消息并且输出出来。我们将会忽略一些java api的细节,专注于快速开始使用rabbitmq。我们要产生的消息为“Hello World”。
在下面的图解中,P代表了生产者,C代表了消费者,中间的框则表示为一个队列。