MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。RabbitMQ是信息传输的中间者。本质上,他从生产者接收消息,转发这些消息给消费者。换句话说,RabbitMQ能够按根据你指定的规则进行消息转发、缓冲、和持久化。
在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
docker安装
一、获取镜像
#指定版本,该版本包含了web控制页面
docker pull rabbitmq:management
二、运行镜像
#方式一:默认guest 用户,密码也是 guest
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management
#方式二:设置用户名和密码
docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbitmq:management
三、访问ui页面
http://localhost:15672/
消息推送
工作队列
工作队列的主要任务:避免立刻执行资源密集型任务,然后必须等待其完成。相反地,我们进行任务调度,我们把任务封装为消息发送给队列。工作进行在后台运行并不断的从队列中取出任务然后执行。当你运行了多个工作进程时,任务队列中的任务将会被工作进程共享执行。
这样的概念在web应用中极其有用,当在很短的HTTP请求间需要执行复杂的任务。
发布/订阅
交换器(Exchanges)
RabbitMQ消息模型的核心思想是,生产者不直接发送任何消息给队列。事实上,一般的情况下,生产者甚至不知道消息应该发送到哪些队列。相反的,生产者只能发送消息给转发器。转发器是非常简单的,一边接收从生产者发来的消息,另一边把消息推送到队列中。转发器必须知道消息如何处理它接收到的消息。是否被添加到一个特定的队列吗?是否应该追加到多个队列?或者是否应该被丢弃?这些规则通过转发器的类型进行定义。
临时队列
首先,每当我们连接到RabbitMQ,我们需要一个新的空的队列。要做到这一点,我们可以创建一个随机名称的队列,或者,让服务器给我们提供一个随机的名称。
其次,一旦消费者与RabbitMQ断开,消费者所接收的那个队列应该被自动删除。
绑定
通过绑定告诉转发器把消息发送给我们的队列。转发器和一个队列之间的关系被称为绑定。
路由
我们可以看到direct类型的转发器与两个队列绑定。第一个队列与绑定键orange绑定,第二个绑定有两个绑定,一个与绑定键black绑定,另一个与green绑定键绑定。在这样的设置的情况下,当一个消息附带一个选择键(routing key) orange发布至转发器将会被导向到队列Q1。消息附带一个选择键(routing key)black或者green将会被导向到队列Q2。所有其他消息将被丢弃。