Springboot集成redis实现订阅发布

Springboot集成redis实现订阅发布
1. 添加依赖
<!--redis-->
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 修改application.yml文件,配置redis
server:
  port: 8080
spring:
  redis:
    host: 127.0.0.1
    password: test
    port: 6379
3. 添加配置
@Configuration
public class MyRedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);

        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);

        template.setValueSerializer(serializer);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
}
4. 配置发布者
@Configuration
public class PubConfig {
    /**
     * 订阅发布的主题
     */
    @Bean
    public ChannelTopic topic() {
        return new ChannelTopic( "test" );
    }
}
5. 订阅者监听类
@Component
public class MsgListener implements MessageListener {

    @Override
    public void onMessage(Message message, byte[] pattern) {
        System.out.println( "Message: " + message.toString() );
    }
}

6. 配置订阅者
@Configuration
public class SubConfig {

    @Bean
    public MessageListenerAdapter messageListenerAdapter() {
        return new MessageListenerAdapter(new MsgListener());
    }

    @Bean
    RedisMessageListenerContainer redisContainer(RedisConnectionFactory factory) {
        final RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(factory);
        container.addMessageListener(messageListenerAdapter(), new ChannelTopic( "test" ));
        return container;
    }
}
7. 测试
@RestController
@RequestMapping("test")
public class AlarmController {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Autowired
    private ChannelTopic topic;
    

    @PostMapping("/test")
    public Object test(@RequestBody  Map<Object, Object> map) {
        System.out.println(map);
        redisTemplate.convertAndSend( topic.getTopic(), "Message: " + map +
                    ";Time:" + Calendar.getInstance().getTime());
        return map;
    }
}
Spring Boot集成Redis实现多个发布订阅是相对简单的。下面是一个简单的步骤指南: 1. 首先,在pom.xml文件中添加RedisSpring Data Redis的依赖: ```xml <dependencies> <!-- Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies> ``` 2. 在application.properties文件中配置Redis连接信息: ``` spring.redis.host=your_redis_host spring.redis.port=your_redis_port ``` 3. 创建一个Redis消息监听器,用于处理接收到的消息。可以实现MessageListener接口或使用注解方式,这里使用注解方式。 ```java @Component public class RedisMessageListener { @Autowired private RedisTemplate<String, String> redisTemplate; @Autowired private RedisMessagePublisher redisMessagePublisher; @EventListener public void handleMessage(Message message) { System.out.println("Received message: " + message.toString()); } @Scheduled(fixedDelay = 1000) public void publishMessage() { redisMessagePublisher.publish("Hello from Redis!"); } } ``` 4. 创建一个Redis消息发布器,用于发布消息。 ```java @Component public class RedisMessagePublisher { @Autowired private RedisTemplate<String, String> redisTemplate; public void publish(String message) { redisTemplate.convertAndSend("channel", message); } } ``` 5. 启动应用程序,Redis将会自动连接并监听消息。在上面的示例中,每秒钟会向名为"channel"的频道发布一条消息,并由监听器接收并处理。 请根据你的具体需求对代码进行适当调整。这只是一个简单的示例,你可以根据实际情况进行扩展和优化。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失忆老幺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值