Redis通过redisTemplate实现发布订阅
RedisConfig核心类,实现了Redis连接,订阅以及发布配置@Configurationpublic class RedisConfig {/*** redisTemplate配置** @param redisConnectionFactory redis连接工厂* @return RedisTemplate*/@Beanpublic RedisTemplate<String, St
·
- RedisConfig核心类,实现了Redis连接,订阅以及发布配置
@Configuration
public class RedisConfig {
/**
* redisTemplate配置
*
* @param redisConnectionFactory redis连接工厂
* @return RedisTemplate
*/
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate template = new StringRedisTemplate(redisConnectionFactory);
@SuppressWarnings({"rawtypes", "unchecked"})
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(
Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
/**
* Redis消息监听
*
* @param redisConnectionFactory redis连接工厂
* @param listenerAdapter 监听器
* @return 结果
*/
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory redisConnectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(redisConnectionFactory);
container.addMessageListener(listenerAdapter, new PatternTopic("test"));
return container;
}
/**
* 绑定消息监听者和接收监听的方法,必须要注入这个监听器,不然会报错
*/
@Bean
public MessageListenerAdapter listenerAdapter(RedisReceiver redisReceiver) {
MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(redisReceiver, "receiveMessage");
//配置序列化对象
Jackson2JsonRedisSerializer<TaskSynData> serializer = new Jackson2JsonRedisSerializer<>(TaskSynData.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(objectMapper);
messageListenerAdapter.setSerializer(serializer);
return messageListenerAdapter;
}
}
- 传输的对象
@Data
public class TaskSynData implements Serializable {
private static final long serialVersionUID = -1681130765215741845L;
/**
* 任务名字
*/
private String name;
/**
* 任务类型
*/
private String type;
}
- 生产者
@Resource
private RedisTemplate redisTemplate;
@RequestMapping(value = "/redis/send", method = RequestMethod.GET)
public String redisSend() {
TaskSynData taskSynData = new TaskSynData();
taskSynData.setType("type");
taskSynData.setName("测试");
redisTemplate.convertAndSend("test", taskSynData);
return "发送成功";
}
- 消费者
@Component
public class RedisReceiver {
public void receiveMessage(TaskSynData taskSynData ) {
System.out.println("收到消息为:" + taskSynData);
}
}
- 结果

更多推荐



所有评论(0)