Rabbit笔记1-Work Queues(Task Queue

2018-03-09  本文已影响58人  8813d76fee36

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),以表示它已经完成了目前分配到的消息任务,可以接收下一条消息。

执行结果

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

上一篇 下一篇

猜你喜欢

热点阅读