Spring Boot 第14篇:在springboot中用redis实现消息队列

转载 2018年04月17日 09:16:15

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

准备阶段

  • 安装redis,可参考我的另一篇文章,5分钟带你入门Redis。
  • java 1.8
  • maven 3.0
  • idea

环境依赖

创建一个新的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

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

源码下载:

https://github.com/forezp/SpringBootLearning

参考资料

messaging-redis

SpringBoot 基于Redis快速实现消息队列

SpringBoot基于Redis快速实现消息队列一. 常用消息队列工具  目前常用的消息队列大概有三种类型,RabbitMQ等AMQP系列, Kafka, Redis等kev value系列,它们的...
  • DuShiWoDeCuo
  • DuShiWoDeCuo
  • 2017年10月24日 11:54
  • 2801

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

Spring Boot 系列 | 第六篇:使用Redis实现消息队列 这篇文章介绍SpringBoot使用Redis实现消息队列。 添加依赖 在pom.xml添加如下依赖: &...
  • u012943767
  • u012943767
  • 2018年02月26日 10:10
  • 6743

SpringBoot利用redis集成消息队列

一、pom文件依赖   org.springframework.boot    spring-boot-starter-data-redis   二、创建消息接收者...
  • lx520aa
  • lx520aa
  • 2017年08月29日 15:53
  • 970

SpringBoot非官方教程 | 第十四篇:在springboot中用redis实现消息队列

这篇文章主要讲述如何在springboot中用reids实现消息队列。准备阶段 安装redis,可参考我的另一篇文章,5分钟带你入门Redis。...
  • forezp
  • forezp
  • 2017年04月30日 16:29
  • 31560

12.springboot使用redis的订阅功能实现消息队列

1.redis发布/订阅功能 redis提供了发布与队列功能(redis实战p52),简单来说就是某一个客户端A向redis订阅一个通道,其他客户端B向通道发送数据时,客户端A能被动地接到通知到并获...
  • qq_34448345
  • qq_34448345
  • 2017年12月14日 00:58
  • 199

redis 消息队列发布订阅模式spring boot实现

最近做项目的时候写到一个事件推送的场景。之前的实现方式是起job一直查询数据库,看看有没有最新的消息。这种方式非常的不优雅,反正我是不能忍,由于羡慕本身就依赖redis,刚好redis 也有消息队列的...
  • wuxuyang_7788
  • wuxuyang_7788
  • 2017年09月16日 17:08
  • 3587

Spring Boot使用Redis进行消息的发布订阅

今天来学习如何利用Spring Data对Redis的支持来实现消息的发布订阅机制。发布订阅是一种典型的异步通信模型,可以让消息的发布者和订阅者充分解耦。在我们的例子中,我们将使用StringRedi...
  • xiaoyu411502
  • xiaoyu411502
  • 2016年06月06日 16:33
  • 7581

spring-boot 结合spring-data-redis使用redis的消息队列

发布消息:1package com.ycb.app.provider.cache;2​3import org.apache.commons.lang.NullArgumentException;4im...
  • Hedy17
  • Hedy17
  • 2018年02月26日 16:19
  • 47

springboot入门--springboot集成redis实现消息发布订阅模式

1,application.properties配置redis以及连接池 #redis spring.redis.host=localhost spring.redis.port=6379 #s...
  • u012995888
  • u012995888
  • 2018年02月26日 15:15
  • 293

Linux 下 ZooKeeper 分布式集群安装

ZooKeeper 就是动物园管理员的意思,它是用来管理 Hadoop(大象)、Hive(蜜蜂)、pig(小猪)的管理员,Apache Hbase、Apache Solr、Dubbo 都用到了 Zoo...
  • smartbetter
  • smartbetter
  • 2016年10月21日 15:22
  • 3240
收藏助手
不良信息举报
您举报文章:Spring Boot 第14篇:在springboot中用redis实现消息队列
举报原因:
原因补充:

(最多只允许输入30个字)