RabbitMQ 队列模式
RabbitMQ 队列模式
1 直接发送模式
不声明Exchange,即采用默认的Exchange。默认的Exchange可以根据routing_key将消息直接发送给特定Queue。
注意:
1) 这种匹配是消息的routing_key与Queue的名字直接进行匹配,而不是与Queue的routing_key。
2) 消息并不能直接发送给queue,这里是经过一个名为''的Exchange进行发送的。
2 工作列队模式
该模型适用于分发资源密集型的任务。假设一下你需要进行10次计算圆周率的操作,每次计算到小数点后n位,每次耗时一个小时
如果只用一台机器计算,需要十个小时。但如果我们将这十个任务分发给十台进行计算,那么只需一个小时。下面的模型就是适用于这种分发任务的。
采用这种模式,列队消息以轮询(round_robin)的方式将消息平均的发给所有与Queue关联的Consumer,一般情况下,每个Consumer都平均的分摊任务。
注意:
1) 在目前的情况下,消息一旦被Consumer取出,就立即从列队中消除。这样当woker执行到任务中途失败时,该任务的信息也丢失了,不能重新开始。
2) RabbitMQ提供一种消息认证机制(message acknowledgments),只有当Consumer返回一个ack时,它才会将消息从列队中删除。如果当Consumer断开连接时,依然没有收到ack,那么它就会重新分发给消息。
3) RabbitMQ不允许以新的属性来重新定义Queue,所以这里我们需要给Queue换个新名子