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

5 篇文章 0 订阅

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

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

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

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

大概应用流程:

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

spring-redis配置 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:redis="http://www.springframework.org/schema/redis"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/redis http://www.springframework.org/schema/redis/spring-redis.xsd">
	<description>spring-redis配置</description>
        //redis链接制造工厂
	<bean id="redisConnectionFactory"
		  class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
		<property name="hostName" value="${redis.server.host}"></property>
		<property name="port" value="${redis.server.port}"></property>
		<property name="usePool" value="true"></property>
	</bean>
   //基于spring封装的redis常用的操作
	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
		<property name="connectionFactory" ref="redisConnectionFactory"></property>
	</bean>
  //一般我们向Redis发送一个消息定义的Java对象,这个对象需要序列化。这里使用JdkSerializationRedisSerializer
	<bean id="jdkSerializer"
		  class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
  //消息发送
	<bean id="sendMessage" class="com.bosssoft.itfinance.payqrcode.messageCenter.common.redisqueue.SendMessage">
		<property name="redisTemplate" ref="redisTemplate"/>
	</bean>
	 //消息监听
	<bean id="messageListener" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
		<property name="delegate" ref="messageDelegateListener" />
		<property name="serializer" ref="jdkSerializer" />
	</bean>
        //定义消息监听,method:监听消息执行的方法,serializer:序列化,topic:监听主题(可以理解为队列名称)
         <redis:listener-container>
             <redis:listener ref="messageListener" method="handleMessage" serializer="jdkSerializer" topic="messageCenterRedisQueue" />
        </redis:listener-container>
</beans>

消息生产者类

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

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

    private RedisTemplate<String, Object> redisTemplate;

    public RedisTemplate<String, Object> getRedisTemplate() {
        return redisTemplate;
    }

    public void setRedisTemplate(RedisTemplate<String, Object> 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());
            //业务逻辑处理
            ...
        }
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独行侠_阿涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值