赞
踩
通过翻译上篇博文,我们初步了解了RabbitMQ的使用方式,本篇博文将继续翻译官方的第二篇教程Work Queues, 通过本次翻译,我将简单记录梳理有关RabbitMQ的消息派发方式,消息确认机制,消息持久化等内容。
在第一篇教程中,我们写了从指定队列中发送和接收消息的程序。在本篇教程中我们将创建一个工作队列,它将被用于在多个消费者中分发耗时任务。
工作队列(又名:任务队列)背后的主要思想是避免立即执行一个资源密集型任务并且必须等待任务的完成。相反地,我们可以安排延迟完成任务。我们封装一个任务作为消息,并将其发送到一个队列中。一个在后台运行的工作程序将获取任务并最终执行任务。但你有多个消费者在运行时,这些任务将会在他们之间共享。
这个概念在web应用程序中尤其有用,因为在一个较短的HTTP请求窗口内不可能处理一个复杂的任务。
在之前的教程中,我们发送了一个“hello world”的字符串消息,现在我们将发送多条字符串来表示复杂任务。我们没有像图片处理,pdf渲染那样的真实任务,所以我们通过Thread.sleep()方法使用程序睡眠来假装我们的程序正在处理耗时复杂的任务。我们将在字符串中添加多个点(.)来模拟作为任务的复杂度,每一个点表示1s的处理时长。比如现在有一个Hello…的模拟任务,这个任务将会耗时3s。
我们将之前的例子Send.java的代码稍作改动,使它可以从命令行中向消息队列发送任意的消息,这个程序将安排任务到我们的工作队列,所以我们称之为NewTask.java:
String message = String.join(" ", args);
channel.basicPublish("", "hello", null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
我们之前的接收程序Recv.java也要修改:它需要为消息体中的每个点假装处理耗时1s。因为它处理被传递的消息并执行任务,所以我们称其为Worker.ja
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。