关于redis:个人学习系列-Spring-Boot-配合-Redis-实现简单的发布订阅功能

4次阅读

共计 1538 个字符,预计需要花费 4 分钟才能阅读完成。

如果只是想实现简略的公布订阅性能的话,又不想用音讯队列减少零碎的复杂性,咱们能够抉择 Redis 来做这个事件。

公布订阅

公布订阅模式就是一种生产者消费者模式,Publisher 负责生产音讯,而 Subscriber 则负责生产它所订阅的音讯。

pom.xml

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

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

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.22</version>
</dependency>

application.yml

server:
  # 端口号配置
  port: 8080
spring:
  # redis 配置
  redis:
    database: 0
    host: 127.0.0.1
    port: 6379
    password:

音讯生产者

/**
 * 音讯生产者
 * @author zhouzhaodong
 */
@RestController
public class RedisController {

    private final RedisTemplate<String, String> redisTemplate;

    public RedisController(RedisTemplate<String, String> redisTemplate) {this.redisTemplate = redisTemplate;}

    @GetMapping("/publish")
    public void publish(@RequestParam String message) {
        // 发送音讯
        // 上面这里须要配置发送的 CHANNEL 名称
        redisTemplate.convertAndSend("helloMessage", message);
    }

}

音讯消费者

/**
 * 音讯消费者
 * @author zhouzhaodong
 */
@Slf4j
@Service
public class MessageSubscriber {public MessageSubscriber(RedisTemplate redisTemplate) {RedisConnection redisConnection = redisTemplate.getConnectionFactory().getConnection();
        redisConnection.subscribe((message, bytes) -> {
            // 收到音讯的解决逻辑
            log.info("Receive message :" + message);
            // 上面这里须要配置接管的 CHANNEL 名称
        }, "helloMessage".getBytes(StandardCharsets.UTF_8));

    }

}

测试

调用接口生产音讯

控制台打印消费者收到的音讯

集体博客地址

http://www.zhouzhaodong.xyz/

代码地址

https://gitee.com/zhouzhaodon…

正文完
 0