Redis通过redisTemplate实现发布订阅

  • 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);
    }
}

  • 结果

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值