RabbitMQ之介绍
本文翻译自RabbitMQ官网。
1、RabbitMQ的介绍
使用消息队列的一个主要的目的是解决数据消费速度和生产速度不一致的问题。
Rabbit MQ是众多消息代理中的一种。本质上,它负责从生产者接收到消息,然后将消息发送给消费者。在这个过程中,它可以根据你的选择对消息传递进行路由、缓存消息或者是持久化消息。先来看一些术语:
(1)生产者即为发送者,发送消息的程序即为生产者,这里简称为P;
(2)队列:队列驻存在RabbitMQ中,消息可以在RabbitMq和应用之间流动,但最终消息是存储在队列中的。本质上,队列是一个有无限容量的buffer,可以存储尽可能多的消息,生产者可以将消息发送到一个队列,消费者也可以从一个队列中取消息。这里称队列为queue_name;
(3)消费者即为接收者,一般是等待着接收消息的应用。这里简称为C;
2、安装与配置
下载erlang OTP 18.3 Windows 64-bit Binary File:https://www.erlang.org/downlowds
下载rabbitmq_server-3.6.1 :https://www.rabbitmq.com/download.html
启动server,如下:
在maven中配置需要依赖的RabbitMQ客户端:
然后就可以开发RabbitMQ的demo了。
3、一个简单的demo
这个demo实现的功能很简单:
(1)有一个生产者,向消息队列中发送消息,消息为:“hello rabbit”;
(2)有一个消息队列,队列名称为:“hello”;
(3)有一个消费者,从消息队列中取消息,并打印出具体消息,如图所示。
实现:
(1)生产者:
首先创建连接工厂(ConnectionFactory),这里使用spring框架自动注入,如下所示:
这里还添加了几个属性。
然后创建连接(Connection):
然后创建通道(Channel):
创建消息队列(Queue):
其中:
queue -- 队列的名称
durable -- 队列的持久属性,在RabbitMQ重启后队列会不会丢失
exclusive -- 队列的排他属性,如果为true,则为创建该队列的消费者私有
autoDelete -- 队列的自动删除属性,在消费者断开连接的时候,队列是否会删除
然后生产者就可以发布消息了:
(2)消费者:
消费者的前期配置基本与生产者相同,注意队列的名称和属性要一致。
注意有一个onBussiness方法,这就是在接收到消息之后,要做的处理工作。
(3)结果
先运行生产者,后运行消费者,消费端结果如下:
消费成功。