消息接收者
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Component;
@Component
public class RedisRecipient implements MessageListener {
public static final String TEST_CHANNEL = "test_channel";
@Override
public void onMessage(Message message, byte[] pattern) {
System.out.println("接受到的信息为:" + message.toString());
}
}
消息的配置
@Configuration
public class RedisConfig {
/**
* 配置RedisTemplate
* @param factory
* @return
*/
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
//String的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用string的序列化
redisTemplate.setKeySerializer(stringRedisSerializer);
//hash的key采用string的序列化
redisTemplate.setHashKeySerializer(stringRedisSerializer);
//value序列化采用jackson
redisTemplate.setValueSerializer(stringRedisSerializer);
//将 Hash 的值序列化为字符串类型,注意存入的时候转成JSON字符串
redisTemplate.setHashValueSerializer(stringRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
/**
* 配置发布订阅的消息监听
*/
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, RedisRecipient redisRecipient) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
// 订阅频道
Topic topic = new PatternTopic(RedisRecipient.TEST_CHANNEL);
// 使用监听器监听Redis的消息
container.addMessageListener(redisRecipient, topic);
return container;
}
}
消息发生者 主要API redisTemplate.convertAndSend(channel, message);
redisTemplate.convertAndSend("test_channel", "发生的消息");