赞
踩
目录
MQ(Message Queue),本质上是个FIFO先入先出的队列,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。
RabbitMQ是一个消息中间件:它接受并转发消息,接收、存储和转发消息数据。
工作队列的主要思想是避免立即执行资源密集型任务,我们把任务封装为消息并将其发送到队列,在后台运行的工作进程将弹出任务并最终执行任务。当有多个工作线程(即消费者)时,这些工作线程将一起处理这些任务。
注意:处于同一队列的工作线程之间是竞争关系,同一个消息不能被重复消费。
消费者按照顺序有序地一个接收一次消息。
消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并仅只完成了部分突然它就挂掉了,会发生什么情况。RabbitMQ一旦向消费者传递了一条消息,便立即将该消息标记为删除。为了保证消息在发送过程中不丢失,RabbitMQ引入消息应答机制,即消费者在接收到消息并且处理该消息之后,告诉RabbitMQ它已经处理了,RabbitMQ可以把该消息删除了。
消息发送后立即被认为已经传送成功,这种模式需要在高吞吐量和数据传输安全性方面做权衡,因为这种模式如果消息在接收之前,消费者那边出现连接或者channel关闭,那么消息就丢失了;另一方面这种模式生产者那边可以传递过载的消息,没有对传递的消息数量进行限制,有可能使得消费者这边由于接收太多还来不及处理的消息,导致这些消息的积压,最终使得内存耗尽。这种模式仅适用在消费者可以高效并以某种速率能够处理这些消息的情况下使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。