redis简单队列java_使用Redis的简单消息队列

redis简单队列java

在本文中,我们将使用列表命令将Redis用作简单的消息队列。

假设我们有一个允许用户上传照片的应用程序。 然后在应用程序中,我们以不同大小显示照片,例如Thumb,Medium和Large。

在第一个实现中,我们可以具有在同一请求中处理上传的图像的任务。 由于这是一项昂贵的任务,因此会使我们的请求变慢。

一个可能的解决方案是使用消息队列(MQ)使该处理异步进行,有许多众所周知的MQ,例如ActiveMQ,RabbitMQ,IBM MQ等。 在下面的示例中,我们将使用LIST结构将Redis用作消息队列。

想法是要有一个LIST,生产者将在其中放置要处理的消息,而某些消费者将观看LIST以处理所发送的消息。

基本上,生产者将使用“ RPUSH队列消息 ”将消息添加到列表的末尾,而消费者将使用“ LPOP队列 ”将列表开头的消息配置为FIFO处理。

客户端将一直在寻找新消息,为此,我们将使用BLPOP命令,该命令是LPOP命令的阻止版本。 基本上,会有一个while循环调用BLPOP来处理新消息。

考虑到图像上传示例,假设我们有一个类ImageUploader负责将图像上传到服务器,它将在队列中添加一条新消息,指示有要处理的图像,消息可以是JSON字符串像这样:

{“imagePath”:”/path/to/image”, “user”:”userid”}

ImageUploder类可能是这样的:

public class ImageUploader {public void uploadImage(HttpServletRequest request){String imagePath = saveImage(request);String jsonPayload = createJsonPayload(request, imagePath);jedis.rpush("queue", jsonPayload);//... keep with the processing}//.... other methods in the class
}

这只是生产者如何工作的一个例子。 在这种情况下,我们已经将图像处理与ImageUploader类分离了。 我们只是在队列中创建一条新消息,以便使用者处理它们。

消息使用者可能是这样的:

package br.com.xicojunior.redistest;import java.util.List;import redis.clients.jedis.Jedis;public class MessageConsumer 
{public static void main( String[] args ){Jedis jedis = new Jedis("localhost");   List<String> messages = null;while(true){System.out.println("Waiting for a message in the queue");messages = jedis.blpop(0,"queue");System.out.println("Got the message");System.out.println("KEY:" + messages.get(0) + " VALUE:" + messages.get(1));String payload = messages.get(1);//Do some processing with the payloadSystem.out.println("Message received:" + payload);}}
}

此使用者代码可以在不同的进程甚至不同的机器上运行。 这个使用者代码是可运行的,我们可以编译它并使用eclipse或java命令运行它。

对于此代码,我们使用jedis.blpop方法,它返回包含2个字符串的列表,(0)–键,(1)–返回的值。 该方法还接收一个整数,它表示超时。 我们传递了0表示没有超时。

当我们运行此代码并且列表中没有值时,在控制台中,我们将仅看到消息

"Waiting for a message in the queue".

然后,如果客户在“队列”列表中添加元素,我们的消费者类将获得其价值。 我们可以使用redis-cli或另一个将在队列中添加元素的类来模拟测试,如下所示:

package br.com.xicojunior.redistest;import redis.clients.jedis.Jedis;public class MessageProducer {public static void main(String[] args) {Jedis jedis = new Jedis("localhost");jedis.rpush("queue", "Value 1");jedis.rpush("queue", "Value 2");jedis.rpush("queue", "Value 3");}}

如果我们在MessageConsumer类已经运行之后运行MessageProducer类,我们将在控制台中看到以下输出:

Waiting for a message in the queue
Got the message
KEY:queue VALUE:Value 1
Message received:Value 1
Waiting for a message in the queue
Got the message
KEY:queue VALUE:Value 2
Message received:Value 2
Waiting for a message in the queue
Got the message
KEY:queue VALUE:Value 3
Message received:Value 3
Waiting for a message in the queue

因此,消息队列将是Redis的另一个可能的用例。 在redis之上建立了一些队列,如RestMQ , Resque – Job Queue等。

参考: XICO JUNIOR'S WEBLOG博客中来自JCG合作伙伴 Francisco Ribeiro Junior的使用Redis的简单消息队列 。

翻译自: https://www.javacodegeeks.com/2014/01/simple-message-queue-using-redis.html

redis简单队列java

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】陕西师范大学700002 细胞生物学

《细胞生物学》作业 一、名词解释 &#xff11;&#xff0e;细胞学说   &#xff12;&#xff0e;原位杂交    &#xff13;&#xff0e;细胞通讯   4&#xff0e;核纤层 5&#xff0e;早熟染色体凝集 6&#xff0e;细胞识别    7&#xff0e;细胞分化    &#xff18;…

【渝粤教育】电大中专Office办公软件 (2)_1作业 题库

1学习好Office办公软件这门课程&#xff0c;应该&#xff08;&#xff09;。 A重视理论学习 B重视上机操作&#xff0c;多练多试&#xff0c;还要学习好基础的知识 C只看不练 D可以随便学习一下 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2在使用Office2016时遇…

oracle 群集 无存储,存储的群集注意事项 - Oracle® ZFS Storage Appliance 管理指南

存储的群集注意事项为了在群集中使用而对 Oracle ZFS Storage Appliance 进行大小调整时&#xff0c;另有两个非常重要的注意事项。或许最重要的决定是将所有存储池的所有权分配给同一机头还是在两个机头之间分割。此处有几点要加以权衡&#xff0c;如下表中所示。一般来说&…

JMetro 5.2版发布

再一次问好 JMetro的新更新刚刚发布。 添加了两种新的控件样式&#xff1a;“标题窗格”和“手风琴”。 此外&#xff0c;还对现有样式和错误修复进行了调整。 最终&#xff0c;JMetro现在也可以通过Maven Central获得。 在本文中&#xff0c;我将详细介绍刚刚发布的JMetro 5…

【渝粤教育】电大中专Office办公软件 (2)作业 题库

1.一个汉字在存储时&#xff0c;占据&#xff08; &#xff09;个字节的存储空间。 A.1 B.2 C.4 D.3 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2.学习好Office办公软件这门课程&#xff0c;应该&#xff08; &#xff09;。 A.可以随便学习一下 B.只看不练 C.…

【渝粤教育】电大中专Windows操作系统_1作业 题库

学习好Windows10应用这门课程&#xff0c;应该&#xff08;&#xff09;。 A重视理论学习 B重视上机操作&#xff0c;多练多试 C只看不练 D可以随便学习一下 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2在使用Windows时遇到困难&#xff0c;&#xff08;&#…

【渝粤教育】电大中专会计基础_1作业 题库

1衡量不同单位经营业绩&#xff0c;最直接、最有效的方法是选取&#xff08; &#xff09;进行计量。 A货币 B实物 C时间 D劳动 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2下列属于会计对经济活动的合法性进行审查的是&#xff0c;各项经济活动是否&#xff…

oracle tsn文件,无法启动OracleOraDB10g_home1TSNListener服务

监听无法启动原因之一&#xff1a;增加下面红色字体内容&#xff0c;建议本机上使用HOST 127.0.0.1# listener.ora Network Configuration File: d:\oracle\product\10.2.0\db_1\network\admin\listener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER (SID…

【渝粤教育】电大中专办公设备使用与维护作业 题库

1以下哪个不是现代办公硬件需求的主要依赖&#xff08;&#xff09;。 A扫描仪 B计算机 C办公桌 D打印机 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2现代办公设备可分为计算机、通信&#xff08;&#xff09;三大类。 A电子工具 B办公机械 C路由器 D碎纸机 错…

在JDK 9(以及8)以及更高版本中,所有内容都可以作为一个流

在JDK 8中&#xff0c;我们终于可以使用流了&#xff0c;除了您使用的API无法产生流的时代之外&#xff0c;其他一切都很好。 然后&#xff0c;您最终编写了一个包装器类方法&#xff0c;该方法允许您将迭代器转换为Stream&#xff0c;因为您错过了流。 public static <T&g…

【渝粤教育】电大中专学前儿童健康教育_1作业 题库

1健康的定义是()年&#xff0c;世界卫生组织提出的。 A1945 B1948 C1955 D1958 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2健康不仅仅是没有疾病或虚弱&#xff0c;而是包括身体、心理和()方面的完好状态。 A精神 B躯体 C社会 D道德 错误 正确答案&#xff1a…

oracle12c asmfd,Oracle 12C R2-新特性-自动配置ASMFD

1说明ASMFD是12.1中就引入的新特性&#xff0c;它可以不用手动配置ASM磁盘&#xff0c;更重要的是它可以保护磁盘被其他非Oracle操作复写&#xff0c;例如dd&#xff0c;echo等命令。https://www.cndba.cn/cndba/Expect-le/article/2559https://www.cndba.cn/cndba/Expect-le/a…

【渝粤教育】电大中专学前儿童科学教育1作业 题库

1.学前儿童科学教育的学习重点是( ) A.学前儿童科学教育的内涵 B.学前儿童科学教育的概念 C.科学的概念 D.技术的概念 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2.学前儿童科学教育的学习难点是( ) A.学前儿童科学教育的内涵 B.学前儿童科学教育在儿童发展中的…

matlab处理svm的数据,SVM-GUI 使用支持向量机(SVM)算法进行处理数据,提取特征参数,并通过MATLAB界面显示相关数 238万源代码下载- www.pudn.com...

文件名称: SVM-GUI下载收藏√ [5 4 3 2 1 ]开发工具: matlab文件大小: 231 KB上传时间: 2014-05-13下载次数: 13提 供 者: 幽灵详细说明&#xff1a;使用支持向量机(SVM)算法进行处理数据&#xff0c;提取特征参数&#xff0c;并通过MATLAB界面显示相关数据-Using Support…

【渝粤教育】电大中专学前儿童语言教育作业 题库

1语言是()和思维的工具。 A交际 B动作 C声音 D表情 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2下面哪个选项不是学前儿童语言获得理论()。 A后天环境论 B先天决定论 C先天与后天相互作用论 D遗传决定论 错误 正确答案&#xff1a;左边查询 学生答案&#xff1…

【渝粤教育】电大中专就业指导 (3)作业 题库

1&#xff08; &#xff09;给中职生就业带来的机遇和挑战 A“十三五”规划 B一带一路 C发展标准化服务业 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2最受企业欢迎的人才应具备&#xff08; &#xff09;素质 A道德品质、文化认同、敬业精神、团队意识、创新思…

Java 11:新的HTTP客户端API

在Java 11中&#xff0c;已将最初在Java 9中引入的孵化HTTP客户端API进行了标准化。 它使连接URL&#xff0c;管理请求参数&#xff0c;cookie和会话更加容易&#xff0c;甚至支持异步请求和websocket。 回顾一下&#xff0c;这是使用传统的URLConnection方法从URL读取的方式&…

按主键更新另一个表oracle,SQL根据ID匹配从一个表更新到另一个表

我相信一个连接的UPDATE FROM将有助于&#xff1a;MS SQLUPDATE Sales_Import SET Sales_Import.AccountNumber RAN.AccountNumber FROM Sales_Import SI INNER JOIN RetrieveAccountNumber RAN ON SI.LeadID RAN.LeadID;MySQL和MariaDBUPDATE Sales_Import SI, RetrieveAcco…

【渝粤教育】电大中专市场营销管理30分钟交卷作业 题库

1.下列关于产品的叙述错误的是&#xff08; &#xff09; A.它实际上是向人传送服务的工具 B.产品是指能够满足人类某种需要或欲望的东西 C.通常可分为实体产品和无形产品 D.无形产品主要指产品信息 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;C 2.企业目标的主要…

mockito_Eclipse的Mockito模板

mockito有时候&#xff0c;我想念树林里的树木-那是一段令人不安的长时间。 我最近才再次意识到这一点&#xff0c;在无数次中键入了一个更详细的模仿表达式之一。 有问题的语句是一个doAnswer(Answer)构造&#xff0c;使用涉及到的静态导入和泛型代码进行编码总是很麻烦。 尽…