Introduction
RabbitMq接收并传递消息,你可以把它当做一个邮局。当你把信件放到邮箱里的时候,你能确定会有邮递员最终会正确递送你的邮件。RabbitMq就是一个邮箱、一个邮局和一个邮递员。
在RabbitMq里,一个队列就代表一个邮箱。虽然消息流经RbbitMq和你的应用,但是消息只能被存在队列里。队列只会被服务器的内存和磁盘所限制,本质上就是一个大的消息缓冲区。一个队列可以接收多个生产者的消息,也可以被多个消费者所接收。
消费者接收队列里的消息。
在这个教程中,我们会写两个程序,一个生产者程序,发送一个消息,一个消费者程序,接收消息并把它们打印出来。
发送消息
Sending
Send是消息发送者,Recv是消息接受者。
Send.java代码如下
然后我们就可以创建一个连接了。
这个连接抽象了套接字连接,负责了协议版本的转换和身份验证,等等。我们用本地机器作为服务器,所以host是localhost,如果我们想要使用其他机器的话,我们可以直接写主机的IP地址或者域名。
然后我们创建一个信道(Channel),也是大部分API调用入口。为了发送消息,我们必须先声明一个队列。
声明队列这个操作是幂等的——他只会在不存在的时候被创建。图中的消息内容是一个字节数组,所以你可以想怎么编码都行。
最后,不要忘记关闭信道和连接。
Receiving
消费者从RabbitMq获取消息,不像生产者,我们要保持消费者一直运行,监听消息并且打印出来。
DefaultConsumer是一个实现了Consumer接口的类,我们使用它来缓存服务器推给我们的消息。
把队列的名字设置成和生产者相同,然后我们打开连接和信道,然后声明和生产者相同的队列。
注意,在消费者里我们也一样的声明了队列,因为,我们可能先于生产者启动消费者,我们想确保在消费消息之前队列存在。
既然是异步的,我们还提供了一个(在我们准备好用消息之前保存消息的)对象形式的回调。
Putting it all together
编译运行略。
翻译自https://www.rabbitmq.com/tutorials/tutorial-one-java.html