https://blog.csdn.net/forezp/article/details/70341818
本文出自方志朋的博客
這篇文章主要講述如何在springboot中用reids實(shí)現(xiàn)消息隊(duì)列。
準(zhǔn)備階段
安裝redis,可參考我的另一篇文章膳帕,5分鐘帶你入門Redis粘捎。
java 1.8
maven 3.0
idea
環(huán)境依賴
創(chuàng)建一個(gè)新的springboot工程,在其pom文件,加入spring-boot-starter-data-redis依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
創(chuàng)建一個(gè)消息接收者
REcevier類,它是一個(gè)普通的類攒磨,需要注入到springboot中泳桦。
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);
}
注入消息監(jiān)聽容器
在spring data redis中,利用redis發(fā)送一條消息和接受一條消息娩缰,需要三樣?xùn)|西:
一個(gè)連接工廠
一個(gè)消息監(jiān)聽容器
Redis template
上述1灸撰、3步已經(jīng)完成,所以只需注入消息監(jiān)聽容器即可:
@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");
}
測(cè)試
在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發(fā)送一條消息漆羔,接收者接收到后梧奢,打印出來。啟動(dòng)springboot程序演痒,控制臺(tái)打忧坠臁:
2017-04-20 17:25:15.536 INFO 39148 — [ main] com.forezp.SpringbootRedisApplication : Sending message…
2017-04-20 17:25:15.544 INFO 39148 — [ container-2] com.forezp.message.Receiver : 》Received
源碼下載:
https://github.com/forezp/SpringBootLearning
參考資料
寫在最后
歡迎關(guān)注、喜歡鸟顺、和點(diǎn)贊后續(xù)將推出更多的spring cloud
教程惦蚊,敬請(qǐng)期待。
歡迎關(guān)注我的微信公眾號(hào)獲取更多更全的學(xué)習(xí)資源讯嫂,視頻資料蹦锋,技術(shù)干貨!
公眾號(hào)回復(fù)“學(xué)習(xí)”欧芽,拉你進(jìn)程序員技術(shù)討論群莉掂。
公眾號(hào)回復(fù)“視頻”,領(lǐng)取800GJava視頻學(xué)習(xí)資源千扔。
公眾號(hào)回復(fù)“領(lǐng)取資源”憎妙,領(lǐng)取1T前端,Java曲楚,產(chǎn)品經(jīng)理厘唾,微信小程序,Python等資源合集大放送龙誊。
公眾號(hào)回復(fù)“慕課”抚垃,領(lǐng)取1T慕課實(shí)戰(zhàn)學(xué)習(xí)資源。
公眾號(hào)回復(fù)“實(shí)戰(zhàn)”趟大,領(lǐng)取750G項(xiàng)目實(shí)戰(zhàn)學(xué)習(xí)資源鹤树。
公眾號(hào)回復(fù)“面試”,領(lǐng)取8G面試實(shí)戰(zhàn)學(xué)習(xí)資源护昧。