SpringBoot+Redis 发布与订阅

两个应用都引入

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

发布者

/**
 * @author hrui
 * @date 2024/8/5 23:32
 */
@RestController
public class PublisherController {

    @Autowired
    private RedisMessagePublisher redisMessagePublisher;

    // 发布消息接口
    @GetMapping("/publish")
    public String publishMessage() {
        String message = "发布一条消息";
        redisMessagePublisher.publish(message);
        return "消息已发布!";
    }
}

/**
 * @author hrui
 * @date 2024/8/5 23:31
 */
@Service
public class RedisMessagePublisher {

    @Autowired
    private RedisTemplate redisTemplate;

    // 发布消息到指定的通道
    public void publish(String message) {
        redisTemplate.convertAndSend("my-topic", message);
        System.out.println("发布消息: " + message + " 到通道: my-topic");
    }
}

spring.application.name=fabu


server.port=8999



spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379

订阅者

@Configuration
public class RedisConfig {

    // 配置Redis消息监听容器
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                            MessageListenerAdapter listenerAdapter) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        // 订阅固定的通道 "my-topic"
        container.addMessageListener(listenerAdapter, new ChannelTopic("my-topic"));
        return container;
    }

    // 配置消息监听适配器,不需要指定方法名,默认调用handleMessage
    @Bean
    MessageListenerAdapter listenerAdapter(RedisMessageSubscriber subscriber) {
        //指定方法名接收消息
        return new MessageListenerAdapter(subscriber, "onMessage");
        //return new MessageListenerAdapter(subscriber);//使用默认方法handleMessage
    }
}

@Service
public class RedisMessageSubscriber {
    // 使用默认方法名 handleMessage 处理消息
//    public void handleMessage(String message, String channel) {
//        System.out.println("接收到消息: " + message + " 来自通道: " + channel);
//    }


    public void onMessage(String message, String channel) {
        System.out.println("接收到消息: " + message + " 来自通道: " + channel);
    }
}

spring.application.name=dingyue

server.port=9000

spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379

这里只是简单介绍 处理方式有多种

  • 实现 MessageListener 接口 :适合希望直接控制消息处理的类,并且需要实现 onMessage 方法。
  • 使用 MessageListenerAdapter :适合将消息处理方法绑定到已有的类和方法上,不需要实现 MessageListener 接口。
相关推荐
苹果醋37 分钟前
React系列(八)——React进阶知识点拓展
运维·vue.js·spring boot·nginx·课程设计
海绵波波10725 分钟前
flask后端开发(1):第一个Flask项目
后端·python·flask
等一场春雨2 小时前
springboot 3 websocket react 系统提示,选手实时数据更新监控
spring boot·websocket·react.js
荆州克莱2 小时前
Golang的性能监控指标
spring boot·spring·spring cloud·css3·技术
AI人H哥会Java3 小时前
【Spring】控制反转(IoC)与依赖注入(DI)—IoC容器在系统中的位置
java·开发语言·spring boot·后端·spring
凡人的AI工具箱3 小时前
每天40分玩转Django:Django表单集
开发语言·数据库·后端·python·缓存·django
赖龙3 小时前
springboot restful mybatis连接mysql返回日期格式不对
spring boot·mybatis·restful
自律的kkk3 小时前
SpringBoot中使用AOP切面编程实现登录拦截
java·spring boot·aop·切面编程·登录拦截
奔跑草-3 小时前
【数据库】SQL应该如何针对数据倾斜问题进行优化
数据库·后端·sql·ubuntu
武昌库里写JAVA3 小时前
【MySQL】MySQL 通过127.0.0.1和localhost登录的区别
spring boot·spring·毕业设计·layui·课程设计