我们现在,简单地,redis
作为一名新的企业技术客户经理复述,,我的第一个任务之一就是了解有关Redis的更多信息。所以我开始挖掘,快速发现复述,流.作为基于流式的应用程序的忠实粉丝,我很高兴地分享我了解到如何使用Redis Streams和Java的了解。
Redis Streams是一种代表日志的Redis数据类型,所以你可以添加新的信息和消息在一个只追加模式(注意:这不是100%准确的,因为您可以从日志中删除消息,但它已经足够了。)Redis Streams允许您构建“Kafka类似”的应用程序,可以:
此外,Redis Streams有概念消费者团体.Redis流群消费者群体,如类似的概念Apache Kafka.,允许客户端应用程序以分布式方式(多个客户端)使用消息,这使得扩展和创建高可用性系统变得容易。
所以,虽然比较Redis Streams和Redis Pub/Sub可能很诱人,并决定其中一个比另一个更好,但这两个功能的目的是不同的。如果你正在评估Pub/Sub和Redis Streams,但还不能马上弄清楚,你可能需要考虑更多需要解决的问题,或者重新阅读这两方面的文档。
(参加Redis大学:Redis Streams课程以了解更多。)
学习如何使用Redis Streams和Java的最佳方法是构建示例应用程序。这Redis-Streams-101-Java GitHub存储库包含示例代码,演示如何将消息发送到Stream和c使用消费者组使用消息。首先,你需要Redis 5.x,Java 8或更高版本,apache maven 3.5.x和git。
Redis有许多由社区开发的Java客户,正如您所看到的那样redis.io..我目前喜欢与Redis Streams一起使用的是生菜,所以我在这个示例应用程序中使用。让我们看看创建示例项目所涉及的步骤:
将下面的依赖项添加到你的项目文件中:
导入以下类:
然后连接:
当你的应用程序完成连接时,使用以下代码断开连接:
一旦你有了连接,你就可以发送信息了。在这个例子中,我让Redis生成消息ID,这是基于时间的,并使用代表物联网天气数据的地图构建身体,实时捕捉风速和方向:
这是代码中发生的事情:
(完整的生产商代码可用在这里.)
Redis Streams提供了几种使用命令消耗和读取消息的方法:Xrange.那XREVRANGE那XREAD.那XREADGROUP..为了关注如何使用Apache Kafka构建应用程序,让我们使用XREADGROUP.来自生菜的命令。
消费者组允许开发人员创建一组客户端,该客户端将协作,ag万博下载万博最新版本下载苹果以便从流中获取消息(用于比例和高可用性)。它也是将客户端关联到特定应用程序角色的方法;例如:
这些消费者组中的每一个都将独立操作,并且每一个消费者组都可以有多个“消费者”(客户端)。
下面是它在Java中的工作方式:
此代码是一个子集main ()方法。我删除了连接管理部分,使其更具可读性。让我们看一下代码。
完整的消费代码可用在这里.
现在您对代码有更好的理解,让我们运行生产者和消费者。您可以从IDE运行此功能或使用Maven,但这是它在Maven CLI中的工作原理。首先开设两个终端,一个生成消息和一个要使用它们的消息,然后按照以下步骤操作:
第1步:克隆并构建项目:
第2步:发布新消息:
步骤3:使用消息
打开一个新的终端并运行以下命令:
使用者将启动并使用您刚刚发布的消息,并等待任何新消息。
步骤4:在第一个终端中,发布100条新消息:
消费者将接收并打印所有消息。
第5步:杀死消费者并发布更多信息
让我们做另一个测试:停止消费者使用简单ctrl + c和t母鸡发了五条新消息:
邮件尚未由任何应用程序消耗,但仍然存储在Redis Stream中。因此,当您启动消费者时,它会消耗这些新消息:
这是其中的差异之一复述,流和redis pub / sub.生产者应用程序在消费者应用程序未运行时发布了许多消息。因为消费者是与StreamOffset.LastConsumed(),当消费者开始时,它查找最后一个消费的ID,并开始从那里读取流。此方法使用组生成一个XGROUPREAD命令。
这个小型项目旨在向您展示如何使用Lettuce是Redis的Java客户端,将消息发布到流,创建消费者组,并使用消费者组使用消息。
这是一个非常基本的例子,在接下来的文章中,我计划深入探讨如何与多个消费者一起工作,以及如何配置消费者组和消费者来控制您想要阅读的消息。