RabbitMQ 简单介绍:
RabbitMQ是一个消息代理,即它的功能为:接受和转发消息。
你可以把它想象成一个邮局:当你把你想要的邮件放在邮箱里,你可以肯定邮差先生最终会把邮件送到你的收件人那里。在这个类比中,RabbitMQ相当于一个邮筒、一个邮局和一个邮差。
RabbitMQ与邮局的主要区别在于,它不处理纸张,而是接受、存储和转发数据的二进制数据。
RabbitMQ和一般的消息传递使用到一些术语:
生产( producing)意味着发送消息。发送消息的程序是生产者( producer ):
队列( queue)是在RabbitMQ内的一个邮箱的名称。尽管消息通过RabbitMQ和您的应用程序流,但它们只能存储在队列中。队列仅由主机的内存和磁盘限制绑定,它本质上是一个大的消息缓冲(buffer)。许多生产者可以发送到一个队列的消息,许多用户可以尝试从一个队列接收数据。这就是我们如何表示一个队列:
消费( consuming)也有类似的含义。消费者( consumer)是一个主要等待接收消息的程序:
请注意,生产者、使用者和代理(broker)不必驻留在同一主机( host )上 。实际上在大多数应用程序中,它们不需要驻留在同一主机上。
简单的应用 — “Hello World!”
在本教程中,我们将在Java中编写两个程序 : 一个发送单个消息的生成器,以及接收
消息并将其打印出来的使用者。我们将对Java API中的一些细节进行粉饰,将注意力集中在这个非常简单的事情上。这只是一个“Hello World”的消息传递。
在下面的简化图中,“P”是我们的生产者,“C”是我们的消费者。
中间的框是一个队列——RabbitMQ代表消费者保存的消息缓冲区。
这里需要顺便提一下Java客户端库( the Java cilent library ):
RabbitMQ讲多种协议。本教程使用AMQP 0 - 9 - 1,这是一种开放的、通用的消息传递协议。有许多不同语言的RabbitMQ客户。我们将使用RabbitMQ提供的Java客户机。下载客户端库(client library)及其依赖关系(SLF4J API 和SLF4J Simple)。将这些文件以及教程Java文件,复制到您的工作目录中。
请注意,SLF4J Simple就足够用于教程,但是您应该使用一个成熟的日志库,如在生产中的Logback。(带有标识符com.rabbitmq和名字 amqp - client的RabbitMQ Java客户机,也在中央Maven存储库中。)
现在有了Java客户端库及其依赖关系,我们可以开始编写代码。
生产者发送消息:
我们将称呼我们的消息发布者(publisher)为 Send 和我们的消息接收者(或者消费者)为 Recv 。Send 将连接到RabbitMQ,发送一条消息,然后退出。
首先,在Send.java中,我们需要import一些类:
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;