springboot中用redis实现消息队列

创建一个消息接收者

public class Receiver {
    private static final Logger LOGGER = LoggerFactory.getLogger(Receiver.class);

    private CountDownLatch latch;

    @Autowired
    public Receiver(CountDownLatch latch) {
        this.latch = latch;
    }

    public void receiveMessage(String message) {
        LOGGER.info("Received <" + message + ">");
        latch.countDown();
    }
}

注入消息接收者

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

@Bean
CountDownLatch latch() {
	return new CountDownLatch(1);
}

@Bean
StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
	return new StringRedisTemplate(connectionFactory);
}

注入消息监听容器

在spring data redis中,利用redis发送一条消息和接受一条消息,需要三样东西:

一个连接工厂
一个消息监听容器
Redis template
上述1、3步已经完成,所以只需注入消息监听容器即可:

@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
										MessageListenerAdapter listenerAdapter) {

	RedisMessageListenerContainer container = new RedisMessageListenerContainer();
	container.setConnectionFactory(connectionFactory);
	container.addMessageListener(listenerAdapter, new PatternTopic("chat"));

	return container;
}

@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
	return new MessageListenerAdapter(receiver, "receiveMessage");
}

测试
在springboot入口的main方法:

public static void main(String[] args) throws Exception{
	ApplicationContext ctx =  SpringApplication.run(SpringbootRedisApplication.class, args);

	StringRedisTemplate template = ctx.getBean(StringRedisTemplate.class);
	CountDownLatch latch = ctx.getBean(CountDownLatch.class);

	LOGGER.info("Sending message...");
	template.convertAndSend("chat", "Hello from Redis!");

	latch.await();

	System.exit(0);
}

先用redisTemplate发送一条消息,接收者接收到后,打印出来。启动springboot程序,控制台打印…

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值