美文网首页
Rabbit笔记1-Work Queues(Task Queue

Rabbit笔记1-Work Queues(Task Queue

作者: 8813d76fee36 | 来源:发表于2018-03-09 15:21 被阅读58次

Spring AMQP API文档

Work Queues(Task Queues)简介

工作队列(任务队列)的主要目的是避免立即执行资源密集型任务以至于需要长时间的等待其完成。代替方案是我们可以定时的让任务稍后执行。

我们将一个任务(task)封装为一个消息(message)发送到一个队列(queue)中。后台的工作进程(worker process)会将任务从队列中弹出并最终执行该任务。任务将在多个工作进程之间共享。

Work Queues(Task Queues)

示例

示例链接
Work Queues (with Spring AMQP)

总结

Exchange类型

实现Work Queues(Task Queues)的Exchange类型为direct

在示例中,发送者(Tut2Sender)使用了rabbitTemplate.convertAndSend(String routingKey, Object object)方法来发送消息到队列。

Tut2Sender

看一下该方法的说明。

convertAndSend
上面提到,将Java对象转换成Amqp的Message,并指定routingKey将其发送到默认的exchange(default exchange)
其实default exchange在Spring AMQP中就是direct类型的。
default exchange

Fair dispatch 和 Round-robin dispatching

当消息在消费者处理完成后,消费者会反馈一个确认消息(ack),以表示它已经完成了目前分配到的消息任务,可以接收下一条消息。

  • Rabbit默认情况
    RabbitMQ默认使用循环调度模式(Round-robin dispatching),即队列中的消息会按顺序依次发送给连接到它的消费者中去。
    此时Rabbit不关心消费者是否反馈了确认消息(ack),只要有新的消息添加到队列中,它都会取出并发送给消费者。
  • Spring AMQP
    在Spring AMQP中,默认使用公平转发模式(Fair dispatch)
    不会将新的消息发送给正在执行消息任务的消费者,而是发送给处于空闲状态的消费者。
执行结果

从上面的结果也可以看到,当instance1接收到Hello...3并执行,需耗时3s;此时instance2接收到耗时1s的Hello.4;当instance2执行完成后,instance1仍在执行Hello...3,此时rabbit将Hello..5分给了空闲的instance2,而不是正在执行当前消息任务的instance1。

相关文章

网友评论

      本文标题:Rabbit笔记1-Work Queues(Task Queue

      本文链接:https://www.haomeiwen.com/subject/bsqpfftx.html