如果只是想实现简略的公布订阅性能的话,又不想用音讯队列减少零碎的复杂性,咱们能够抉择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: 8080spring:  # redis配置  redis:    database: 0    host: 127.0.0.1    port: 6379    password:

音讯生产者

/** * 音讯生产者 * @author zhouzhaodong */@RestControllerpublic 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@Servicepublic 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...