本指南引导您完成使用Spring Data Redis发布和订阅通过Redis发送的消息的过程。Messaging with Redis

1. 我们将构建什么?

您将构建一个使用StringRedisTemplate发布字符串消息的应用程序,并使用MessageListenerAdapter为其提供POJO订阅。

使用Spring Data Redis作为发布消息的手段可能听起来很奇怪,但正如您将发现的那样,Redis不仅提供了NoSQL数据存储,还提供了消息传递系统。

2. 我们需要准备什么?

  • 大约十五分钟

  • 一个喜欢的文本编辑器或者IDE

  • JDK 1.8 或者更高

  • Gradle 4+ 或者 Maven 3.2+

  • 你也可以导入代码到你的IDE中

    • Spring Tool Suite (STS)

    • IntelliJ IDEA

      • Redis server

3.  如何完成这个指南?

像大多数Spring入门指南一样,您可以从头开始并完成每个步骤,也可以绕过已熟悉的基本设置步骤。 无论哪种方式,你最终得到工作代码。

为了兼顾无法使用Intellij Idea 的读者,我这里依然采用STS来完成这个指南。

1. 打开我们的STS ,New ————> Import Spring Getting Started Content

2.  输入message, 搜索找到Message Redis

Tips: Code Sets 我们仍然全部勾选,这样系统默认会生成一个已经写好的complete 项目,这样方便我们在Initial项目中模仿学习。

3.  搭建Redis 服务器

在构建消息传递应用程序之前,您需要设置将处理接收和发送消息的服务器。

Redis是一个开源的BSD许可的键值数据存储器,它还附带了一个消息传递系统。

3.1 在Windows 操作系统安装Redis

关于Redis 在windows 上的安装详情可参考我的另外一篇博文:  揭开Redis的神秘面纱

3.2 启动Redis 服务器

下载安装好后,你如果没有配置环境变量需要先进入Redis 安装文件夹

比如我们的安装在C:\app\Redis\Redis-x64-3.2.100 那么我们打开命令行窗口后,执行以下命令进入安装文件夹:

C:\app\Redis\Redis-x64-3.2.100

Tips: 如果已经配置了环境变量可以跳过上述步骤

然后我们执行启动Redis 服务器命令

redis-serve

执行成功后你会看到下面图示的内容:

Tips: 如果看到上述内容,说明服务器启动成功,端口监听在6379端口

4. 创建一个Redis消息接收器

在任何基于消息传递的应用程序中,都有消息发布者和消息接收者。 要创建消息接收方,请使用一种方法来实现接收方以响应消息:

src/main/java/hello/Receiver.java

package hello;import java.util.concurrent.CountDownLatch;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;public class Receiver {private static final Logger LOGGER=LoggerFactory.getLogger(Receiver.class);private CountDownLatch latch;@Autowiredpublic Receiver(CountDownLatch latch) {this.latch=latch;}public void receiveMessage(String message) {LOGGER.info("Received <" +message+">");latch.countDown();}
}

Receiver是一个简单的POJO,它定义了一种接收消息的方法。 正如您将Receiver注册为消息侦听器时所看到的,您可以根据需要命名消息处理方法。

出于演示的目的,它的构造函数使用倒计数锁存器进行自动装配。 这样,它可以在收到消息时发出信号。

5. 注册侦听器并发送消息

Spring Data Redis提供了使用Redis发送和接收消息所需的所有组件。 具体来说,你需要配置:

  • 连接工厂
  • 消息侦听器容器
  • Redis模板

您将使用Redis模板发送消息,并且您将向Receiver注册消息侦听器容器,以便它可以接收消息。 连接工厂驱动模板和消息侦听器容器,使它们能够连接到Redis服务器。

本示例使用Spring Boot的默认RedisConnectionFactory,它是基于Jedis Redis库的JedisConnectionFactory的一个实例。 连接工厂被注入到消息监听器容器和Redis模板中。

src/main/java/hello/Application.java

package hello;import java.util.concurrent.CountDownLatch;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;@SpringBootApplication
public class Application {private static final Logger LOGGER=LoggerFactory.getLogger(Application.class);@BeanRedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,MessageListenerAdapter listenerAdapter) {RedisMessageListenerContainer container=new RedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);container.addMessageListener(listenerAdapter,new PatternTopic("chat"));return container;}@BeanMessageListenerAdapter listenerAdapter(Receiver receiver) {return new MessageListenerAdapter(receiver,"receiveMessage");}@BeanReceiver receiver(CountDownLatch latch) {return new Receiver(latch);}@BeanCountDownLatch latch() {return new CountDownLatch(1);}@BeanStringRedisTemplate template(RedisConnectionFactory connectionFactory) {return new StringRedisTemplate(connectionFactory);}public static void main(String[] args)throws InterruptedException{ApplicationContext ctx=SpringApplication.run(Application.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);}
}

在listenerAdapter方法中定义的bean在容器中定义的消息侦听器容器中注册为消息侦听器,并将侦听“chat”主题上的消息。

由于Receiver类是POJO,因此需要将其包装在实现AddMessageListener()所需的MessageListener接口的消息侦听器适配器中。

消息侦听器适配器还配置为在消息到达时调用Receiver上的receiveMessage()方法。

连接工厂和消息监听器容器bean都是您需要侦听消息的。

要发送消息,您还需要一个Redis模板。在这里,它是一个配置为StringRedisTemplate的bean,它是RedisTemplate的一个实现,它着重于Redis的常用用法,其中键和值都是`String`s。

main()方法通过创建Spring应用程序上下文来解决所有问题。应用程序上下文然后启动消息监听器容器,并且消息监听器容器bean开始监听消息。然后,main()方法从应用程序上下文中检索StringRedisTemplate bean,并使用它发送“来自Redis的Hello!”消息在“chat”主题上。最后,它关闭Spring应用程序上下文并结束应用程序。

6. 编译成可执行Jar

您可以使用Gradle或Maven从命令行运行应用程序。 或者您可以构建一个包含所有必需的依赖项,类和资源的可执行JAR文件,并运行该文件。 这使得在整个开发生命周期内跨越不同环境等,将服务作为应用程序发布,版本化和部署变得非常容易。

生成Jar

如果您正在使用Gradle,则可以使用./gradlew bootRun运行该应用程序。 或者您可以使用./gradlew构建构建JAR文件。 然后你可以运行JAR文件:

java -jar build/libs/gs-messaging-redis-0.1.0.jar

如果您使用的是Maven,则可以使用./mvn spring-boot:run来运行该应用程序。 或者您可以使用./mvn clean包构建JAR文件。 然后你可以运行JAR文件:

java -jar target/gs-messaging-redis-0.1.0.jar

上述过程将创建一个可运行的JAR。 您也可以选择构建经典的WAR文件。

7. 执行成功后你将看到下面的信息:


恭喜! 您刚刚使用Spring和Redis开发了一个简单的发布和订阅应用程序。

源码:点击查看

转载于:https://www.cnblogs.com/xingyunblog/p/9128568.html

译:9.使用Redis进行消息传递相关推荐

  1. Redis应用----消息传递

    1.摘要 消息传递这一应用广泛存在于各个网站中,这个功能也是一个网站必不可少的.常见的消息传递应用有,新浪微博中的@我呀.给你评论然后的提示呀.赞赞赞提示.私信呀.甚至是发微博分享的新鲜事:知乎中的私 ...

  2. 使用Redis进行消息传递

    你需要什么 大约 15 + 15 分钟 IntelliJ IDEA或其他编辑器 JDK 1.8或更高版本 Maven 3.2+ Redis server 你会建立什么 您将构建一个使用StringRe ...

  3. Redis:发布订阅机制

    参考资料: <Redis进阶--发布订阅详解> <Redis 发布订阅> <Redis进阶 - 消息传递:发布订阅模式详解> 写在开头:本文为学习后的总结,可能有不 ...

  4. Ray:一个分布式应用框架

    下一代AI应用程序将持续与环境交互并从这些交互中学习. 这些应用程序在性能和灵活性方面都提出了新的和苛刻的系统要求. 在本文中,我们考虑这些要求并提出Ray ----- 一个分布式系统来解决它们.Ra ...

  5. Docker Compose 练习:投票 App

    Docker Compose 经典示例: Example Voting App 示例投票App GitHub地址:https://github.com/dockersamples/example-vo ...

  6. 40000+字超强总结?阿里P8把Java全栈知识体系详解整理成这份PDF

    40000 +字长文总结,已将此文整理成PDF文档了,需要的见文后下载获取方式. 全栈知识体系总览 Java入门与进阶面向对象与Java基础 Java 基础 - 面向对象 Java 基础 - 知识点 ...

  7. hydra-microservice 中文手册(3W字预警)

    Hydras 是什么? Hydra 是一个 NodeJS 包(技术栈不是重点,思想!思想!思想!),它有助于构建分布式应用程序,比如微服务. Hydra 提供服务发现(service discover ...

  8. Go社区的2017回顾

    今天是2017年的最后一天,首先感谢屏幕前的你,感谢一路来对于我们Go社区的支持,让我们Go中国社区成为国际上最活跃的社区,今天放假和大家一起回顾一下我们社区这一年来的发展. 首先我们看一下目前中国社 ...

  9. 如何监控Redis性能指标(译)

    如何监控Redis性能指标(译) Redis给人的印象是简单.很快,但是不代表它不需要关注它的性能指标,此文简单地介绍了一部分Redis性能指标. 翻译过程中加入了自己延伸的一些疑问信息,仍然还有一些 ...

最新文章

  1. Linux系统火焰图
  2. AlphaGo之父DeepMind再出神作,PrediNet原理详解
  3. 无线信标功能初步测试
  4. tomcat启动不了,报java.lang.Exception: Socket bind failed: [730013] ???
  5. matlab 中imagesc的用法
  6. 如何将rdd导入数据库中【简单实例】
  7. 实现DDD领域驱动设计: Part 4
  8. Flex builder3与eclipse整合 转载
  9. 2021湖北高考成绩查询热线,湖北招生考试网:2021年湖北高考成绩查询入口、查分系统...
  10. 【API进阶之路】逆袭!用关键词抽取API搞定用户需求洞察
  11. Ubuntu(Deepin)搭建Android开发环境(Android Studio)
  12. 持久化存储技术之SharedPreferences存储
  13. Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(VSM)
  14. 删除pdf(论文)的行号
  15. 大学计算机基础题库百度云资源,《大学计算机基础试题题库及答案》.pdf
  16. 联想m7400更换墨粉盒怎么清零_联想M7400、7600打印机换粉盒或加碳粉后,仍提示缺粉?联想7400、7600硒鼓加粉清零图解...
  17. 《少有人走过的路–心智成熟的旅程》读书笔记
  18. 数论day2——离散对数、元根
  19. VNC访问阿里云服务器
  20. Map接口总结与HashMap源码分析

热门文章

  1. Bash 中的 $0 在什么时候不是 argv[0]
  2. Yii框架常见问题汇总
  3. 影响用户体验的4个因素
  4. 基本明白了什么是冲突域和广播域
  5. Android应用程序组件Content Provider在应用程序之间共享数据的原理分析(2)
  6. APPENDIX B-菜单计划和食谱-Pagano博士的七天菜单计划样例-未完待续
  7. 玻璃体液化研究(控制)
  8. 小米手机反复提示“请勿遮挡听筒区域“
  9. 删除Nifi中的template
  10. 爬虫为什么使用asyncio以及邮件系统为什么使用celery