java redis 任务队列_利用Redis 实现消息队列

该博客通过实例展示了如何利用Redis的List数据结构创建一个任务队列,包括生产者和消费者模拟程序,用于任务调度和消息处理。在生产者程序中,任务被插入到Redis的List中,消费者程序则从队列中取出任务进行处理,模拟了成功和失败的处理场景。
摘要由CSDN通过智能技术生成

1.用redis中的List可以实现队列,这样可以用来做消息处理和任务调度的队列

dbefbe4f347a7abf27131b8ca4084688.png

2.代码模拟

代码结构

4917c683b254ad6416a99d7e76fc6c79.png

生产者模拟程序/**

*

*/

package scheduleTest;

import java.util.Random;

import java.util.UUID;

import redis.clients.jedis.Jedis;

/**

* 模拟一个生产者

Title: TaskProducer

Description: 

Company: 

* @author 夏 杰

* @date 2015年12月11日 下午4:26:48

* @vesion 1.0

*/

public class TaskProducer implements Runnable{

Jedis jedis = new Jedis("120.55.195.177",6379);

public void run() {

Random random = new Random();

while(true){

try{

Thread.sleep(random.nextInt(600) + 600);

// 模拟生成一个任务

UUID taskid = UUID.randomUUID();

//将任务插入任务队列:task-queue

jedis.lpush("task-queue", taskid.toString());

System.out.println("插入了一个新的任务: " + taskid);

}catch(Exception e){

e.printStackTrace();

}

}

}

}

消费者模拟程序/**

*

*/

package scheduleTest;

import java.util.Random;

import redis.clients.jedis.Jedis;

/**

* 模拟消费者

Title: TaskConsumer

Description: 

Company: 

* @author 夏 杰

* @date 2015年12月11日 下午4:44:23

* @vesion 1.0

*/

public class TaskConsumer implements Runnable {

Jedis jedis = new Jedis("120.55.195.177",6379);

public void run() {

Random random = new Random();

while(true){

//从任务队列"task-queue"中获取一个任务,并将该任务放入暂存队列"tmp-queue"

String taskid = jedis.rpoplpush("task-queue", "tmp-queue");

// 处理任务----纯属业务逻辑,模拟一下:睡觉

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

//模拟成功和失败的偶然现象

if(random.nextInt(13) % 7 == 0){// 模拟失败的情况,概率为2/13

//将本次处理失败的任务从暂存队列"tmp-queue"中,弹回任务队列"task-queue"

jedis.rpoplpush("tmp-queue", "task-queue");

System.out.println(taskid + "处理失败,被弹回任务队列");

} else {// 模拟成功的情况

// 将本次任务从暂存队列"tmp-queue"中清除

jedis.rpop("tmp-queue");

System.out.println(taskid+"处理成功,被清除");

}

}

}

}

调度主程序/**

*

*/

package scheduleTest;

/**

Title: TaskShedulerSystem

Description: 

Company: 

* @author 夏 杰

* @date 2015年12月11日 下午4:19:09

* @vesion 1.0

*/

public class TaskShedulerSystem {

public static void main(String[] args) throws Exception {

// 启动一个生产者线程,模拟任务的产生

new Thread(new TaskProducer()).start();

Thread.sleep(15000);

//启动一个线程者线程,模拟任务的处理

new Thread(new TaskConsumer()).start();

//主线程休眠

Thread.sleep(Long.MAX_VALUE);

}

}

运行结果

插入了一个新的任务: 8025c8b8-f81f-4560-a653-3f339cc371a6

插入了一个新的任务: 98dcf980-10d9-4df6-8765-a4873f6b6a74

插入了一个新的任务: d9636112-4cea-4f49-9f70-88e934aa2a66

插入了一个新的任务: 0a8a2799-d672-4444-b53d-74b679559565

插入了一个新的任务: 3948e29e-0217-434a-b7fe-c3be2f0b1073

插入了一个新的任务: f06c3a03-83a1-4278-a7c8-61d88afcbadf

插入了一个新的任务: fbf7ed91-b1f1-4713-8490-325d77f951b0

插入了一个新的任务: 99cbf0e4-d981-45ad-88f4-10db1604171e

插入了一个新的任务: ca7cd3cf-9ae3-41a1-b8e1-c8ac9a729255

插入了一个新的任务: 3c954253-d195-4185-b27d-390a6e441eaa

插入了一个新的任务: 4b7f2b4d-c77b-4813-9a63-2b6975cb44a1

插入了一个新的任务: 662e0d60-7163-444c-9f1a-43451bb442c3

插入了一个新的任务: d9cca9bd-9870-468d-9beb-f2c3e029c58c

插入了一个新的任务: 7af0318f-7771-4996-99aa-7adb26214f6c

插入了一个新的任务: 7deb7d15-9234-44c8-92d6-53e44b578f6b

插入了一个新的任务: 419a4e25-4343-43f6-bd0e-1f02c6aea19f

插入了一个新的任务: b955ac83-6371-461e-b86b-2a12f45809cc

8025c8b8-f81f-4560-a653-3f339cc371a6处理成功,被清除

插入了一个新的任务: 73218c74-dfd6-46c3-84eb-a14df4a3f7f5

98dcf980-10d9-4df6-8765-a4873f6b6a74处理成功,被清除

插入了一个新的任务: f90f9781-6456-474f-8736-93dc3dcc548f

d9636112-4cea-4f49-9f70-88e934aa2a66处理成功,被清除

插入了一个新的任务: cc499c95-3153-4392-9341-3e7173cbf685

0a8a2799-d672-4444-b53d-74b679559565处理失败,被弹回任务队列

插入了一个新的任务: 437c33ae-8adb-49fd-8aad-9e7a396aa72b

3948e29e-0217-434a-b7fe-c3be2f0b1073处理失败,被弹回任务队列

插入了一个新的任务: dbd99594-0a82-4dee-a481-117e1541c549

f06c3a03-83a1-4278-a7c8-61d88afcbadf处理成功,被清除

插入了一个新的任务: d9900559-a995-49cd-9300-540375c21ea0

fbf7ed91-b1f1-4713-8490-325d77f951b0处理成功,被清除

插入了一个新的任务: 72dd3c9a-0cf7-4dd4-9a8d-378da4a531a1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值