springboot redis发布与订阅

1、引入pom

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、配置RedisConfig

@Configuration
public class RedisConfig {


    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        jackson2JsonRedisSerializer.setObjectMapper(om);

        // 配置序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        template.setKeySerializer(stringRedisSerializer);
        template.setHashKeySerializer(stringRedisSerializer);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }

    /**
     * redis消息监听器容器
     *
     * @param connectionFactory
     * @param listenerAdapter
     * @return
     */
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        //订阅多个频道,相当于消息队列中的topic
        container.addMessageListener(listenerAdapter, new PatternTopic("order"));
        return container;
    }


    /**
     * 配置消息接收处理类,如果参数不一致,可
     *
     * @param orderRedisMessage 自定义消息接收类
     * @return
     */
    @Bean()
    MessageListenerAdapter listenerAdapter(OrderRedisMessage orderRedisMessage) {
        return new MessageListenerAdapter(orderRedisMessage, "getMessage");
    }

}
@Component
public class OrderRedisMessage {

    public void getMessage(String object) {
        // 接收到消息之后进行业务处理
        System.out.println(object + "-----------OrderRedisMessage---------");
    }



}
    @GetMapping("subscribe")
    public String subscribe(String channel,Book book){
        redisTemplate.convertAndSend(channel,book);
        return "200";
    }

3、请求

 

猜你喜欢

转载自blog.csdn.net/wdz985721191/article/details/119040322