Spring +redis 发布订阅模式填坑记录

一、包

Spring +redis 发布订阅模式填坑记录_第1张图片

注意版本关系,这里为了不动spring的版本,将spring-data-redis的版本降到1.6.4了,网上推荐jedis2.9.0对应spring-data-redis 1.8.1,但是同时也要考虑spring的版本,否则后续redisTemplate初始化有问题。

二、配置文件

命名空间,注意redis相关的,另外配置文件万不可在网页上复制,各种奇怪问题!!!



序列化与spring模板


 
 
  
              
               
              
              
               
    
 
 
 
   

消息发布工具类

mport org.springframework.data.redis.core.RedisTemplate; 
import org.springframework.data.redis.serializer.RedisSerializer;
/**
 * redis发布工具类
 * @author ts
 * @version 2019-07-16
 */
public class RedisPuUtil {
	
	 private RedisTemplate redisTemplate = null;

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


	    public RedisTemplate getRedisTemplate() {
	        return redisTemplate;
	    }

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

订阅者与订阅注册


    
        
    
   
    
         
    

 发布

RedisPuUtil.sendMessage("java",sendMail);

注意:sendMail实体类必须继承序列化类或实现接口

订阅实现:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.serializer.RedisSerializer;

public class RedisSendMailListener implements MessageListener {

	@Autowired
	protected SendMail sendMail;
	
	public RedisSerializer jsonRedisSerializer;
	
	
	public RedisSerializer getJsonRedisSerializer() {
		return jsonRedisSerializer;
	}


	public void setJsonRedisSerializer(RedisSerializer jsonRedisSerializer) {
		this.jsonRedisSerializer = jsonRedisSerializer;
	}


	@Override
	public void onMessage(Message message, byte[] arg1) {
		    SendMail object = (SendMail)jsonRedisSerializer.deserialize(message.getBody()); 
		    System.out.println(object.toString());
		
	}
 
	
} 
  

 

你可能感兴趣的:(redis)