转载请标明出处:

原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot14-redis-mq/

本文出自方志朋的博客

这篇文章主要讲述如何在springboot中用reids实现消息队列。

准备阶段

环境依赖

创建一个新的springboot工程,在其pom文件,加入spring-boot-starter-data-redis依赖:

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

创建一个消息接收者

REcevier类,它是一个普通的类,需要注入到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);
}

注入消息监听容器

在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程序,控制台打印:

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 <Hello from Redis!>

测试通过,接收者确实接收到了发送者的消息。

源码下载:

https://github.com/forezp/SpringBootLearning

参考资料

messaging-redis




扫码关注公众号有惊喜

(转载本站文章请注明作者和出处 方志朋的博客

最新文章

  1. Centos7设置关闭防火墙
  2. jQuery插件编写规范
  3. [问题2014S08] 解答
  4. ThinkPHP3.2 行为扩展以及插件机制介绍!
  5. BZOJ 1016 星球大战starwar(逆向-并查集)
  6. Win10开机小键盘不亮解决办法
  7. openCV(三)---图像缩放
  8. TweenLite JS版
  9. linux shell变量$#,$@,$0,$1,$2的含义解释
  10. Python初识(PyMysql实例)
  11. Java自定义注解及使用
  12. Kafka监控系统Kafka Eagle:支持kerberos认证
  13. (Angular Material)用Autocomplete打造带层级分类的DropDown
  14. MySQL安装与启动
  15. C# Uditor 富文本的部署
  16. Spring 通知
  17. Sphinx全文检索
  18. weblogic管理服务器密码相关
  19. 本地存储(localStorage、sessionStorage、web Database)
  20. String和StringBufffer的区别

热门文章

  1. C++程序设计基础(2)变量
  2. webview中播放视屏,返回或者退出后,仍然会有声音。
  3. javascript方法重载惹的祸
  4. 每隔5s执行一次动作
  5. css 盒模型 文档流 几种清除浮动的方法
  6. stark——pop功能(admin中添加功能)
  7. 高效的jQuery代码编写技巧
  8. Objective C 中的nil,Nil,NULL和NSNull理解
  9. Android 自定义圆形图表
  10. 应用——dubbo的基本使用