redis消息队列结合简单时间轮处理任务

上面一篇作者讲解了简单时间轮的概念和应用,不懂可以参考:简单时间轮

简单时间轮可以对多个任务进行周期性的执行,可以定制化周期进行任务执行。

本篇内容讲解redis消息队列和时间轮的搭配应用。

声明:redis消息队列采用生产消费者模式

大概应用流程:

redis消息队列结合简单时间轮处理任务_第1张图片

下面附上redis消息队列-消费订阅者模式的事例代码,时间轮模块代码请参考时间轮

spring-redis配置 



	spring-redis配置
        //redis链接制造工厂
	
		
		
		
	
   //基于spring封装的redis常用的操作
	
		
	
  //一般我们向Redis发送一个消息定义的Java对象,这个对象需要序列化。这里使用JdkSerializationRedisSerializer
	
  //消息发送
	
		
	
	 //消息监听
	
		
		
	
        //定义消息监听,method:监听消息执行的方法,serializer:序列化,topic:监听主题(可以理解为队列名称)
         
             
        

消息生产者类

import org.springframework.data.redis.core.RedisTemplate;
import java.io.Serializable;

/**
 * redis队列 生产者
 * created by 魏霖涛 on 2017/9/6 0006
 */
public class SendMessage {

    private RedisTemplate redisTemplate;

    public RedisTemplate getRedisTemplate() {
        return redisTemplate;
    }

    public void setRedisTemplate(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void sendMessage(String channel, Serializable message) {
        redisTemplate.convertAndSend(channel, message);
    }
}

消息消费者类(监听)

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.management.timer.TimerMBean;
import java.io.Serializable;
import java.sql.Time;

/**
 * created by 魏霖涛 on 2017/9/6 0006
 */
@Component("messageDelegateListener")
public class MessageDelegateListener {
@Autowired
private IDistributeService distributeService;
private Logger logger = LoggerFactory.getLogger("redis-comsumer for message");
    //监听Redis消息
    public void handleMessage(Serializable message){
        //生产者存进队列的消息对象只要是Serializable类型,那么取出来的还是对象,不用做强转成对象操作       
        if(message instanceof TimeWheelBean){
            TimeWheelBean timeWheelBean = (TimeWheelBean) message;
            logger.info("请求对象信息:"+timeWheelBean.toString());
            //业务逻辑处理
            ...
        }
    }
}

你可能感兴趣的:(时间轮算法,redis)