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 接口。
相关推荐
我叫黑大帅7 分钟前
PyScript-GitHubRepo: 构建高性能GitHub仓库批量下载工具的技术实践
后端·python·面试
平凡但不平庸的码农1 小时前
Go 错误处理详解
开发语言·后端·golang
spencer_tseng1 小时前
Spring Boot 3.0+ jakarta.*
java·spring boot
PRINT!2 小时前
个人财富全景管理系统 AssetMe【内容均为AI制作】
spring boot·信息可视化·ai编程
请你喝可乐2 小时前
AI Agent Skill 高阶使用指南:从入门到精通
后端
用户962377954482 小时前
代码审计 | Struts2 —— S2-016 OGNL 注入原理
后端
9号达人2 小时前
为什么你应该在 MQ 里用多个消费者,而不是一个
java·后端·架构
阿星做前端3 小时前
重度 AI 编程用户的一天:我怎么把 Claude Code / Codex 工作流搬进浏览器工作台
前端·javascript·后端
代码羊羊3 小时前
Rust 类型转换全方位通俗易懂指南(as、TryInto、强制转换、Transmute)
后端·rust
jay神3 小时前
基于SpringBoot的宠物生命周期信息管理系统
java·数据库·spring boot·后端·web开发·宠物·管理系统