如何利用redis做消息队列

时间:2022-12-06 01:23

如何利用redis做消息队列

利用redis做消息队列的示例:

1.生产者模拟程序,代码:

package scheduleTest;

import java.util.Random;

import java.util.UUID;

import redis.clients.jedis.Jedis;

/**

* 模拟一个生产者

*

Title: TaskProducer

*

Description:

*

Company:

* @author 夏 杰

* @date 2020年12月8日 下午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();

}

}

}

}

2.消费者模拟程序,代码:

 

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+"处理成功,被清除");

}

}

}

}

3.调度主程序,代码:

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);

}

}

标签:
随便看看
本类推荐
本类排行
热门标签

我国国家通讯社行不行啊细狗新年贺词祝福语2023年祝福语新年新年贺词新年贺词祝福语居家抗病毒小药箱除夕高速免费吗2022年除夕高速免费吗春联春联句子大全春联句子大全七字年夜饭十二道菜年夜饭十二道菜单年夜饭吃什么年夜饭吃什么菜吃年夜饭的寓意年夜饭黑芝麻菊花茶晒菊花茶腌腊肉送妈妈生日礼物汉白玉送闺蜜水钻送女人礼物爸爸生日送礼物送老公