Spring Boot 系列 | 第六篇:使用Redis实现消息队列

Spring Boot 系列 | 第六篇:使用Redis实现消息队列

这篇文章介绍SpringBoot使用Redis实现消息队列。

添加依赖

在pom.xml添加如下依赖:

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

创建消息接收者

public class Receiver {

    private Logger logger = LoggerFactory.getLogger(getClass());

    public void receiveMessage(String message) {
        logger.info("Received :" + message);
    }
}

这里声明了一个接受者,里面是提供了一个receiveMessage方法,下面会使用MessageListenerAdapter对这个接收者进行代理,通过反射把消息传到receiveMessage中,也可以通过实现MessageListener接口来实现消息接受者,这里为了简单使用代理的方式。

注入消息接收者

@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.addMessageListener(listenerAdapter, new PatternTopic("topic"));
    return container;
}

@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
    //指定Receiver为代理接收类,接收消息方法为receiveMessage
    return new MessageListenerAdapter(receiver, "receiveMessage");
}

@Bean
Receiver receiver() {
    return new Receiver();
}

测试

编写一个Controller进行测试

@RestController
@RequestMapping("/message")
public class MessageController {

    @Autowired
    StringRedisTemplate stringRedisTemplate;

    @PostMapping("/sendRedisMsg")
    public void sendRedisMessage(String message) {
        stringRedisTemplate.convertAndSend("topic", message);
    }
}

这个Controller使用了spring-data-reids提供的StringRedisTemplate发送消息

在Postman中访问这个接口:

这里写图片描述

可以看到控制台输出:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值