前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >作为程序员,你可能不知道,Stream竟然还有应用进阶学习?

作为程序员,你可能不知道,Stream竟然还有应用进阶学习?

作者头像
愿天堂没有BUG
发布2022-10-28 15:26:33
2880
发布2022-10-28 15:26:33
举报

Stream应用进阶

在微服务架构下,细粒度服务之间更容易发生频繁的分布式集成与交互。

基于消息中间件的服务交互模式,或者建立以事件驱动为主导的架构模型,可以帮助业务建立和实现核心的领域事件驱动交互机制。

领域事件(Domain Event)的通信改变了领域对象的状态,比如订单创建事件、库存添加事件。

一个领域事件可以表达正在发生在一个领域对象上的行为。领域事件的发生伴随着修改的数据、时间戳、聚合ID及其他附加信息。在微服务架构下,领域事件以发布/订阅的模式,将事件发布到MQ中间件,允许多个不同微服务订阅事件并消费事件,这个事件可能是一个订单创建事件(OrderCreateEvent)或订单修改事件(CustomerModifyEvent)。

以上方式都遵循面向对象的方式,然而这些对象穿梭在生产者、分布式消息队列和消费者中,变成了共享类库,当众多微服务需要依赖共享类库时,就产生了高度的耦合。这种共享分布式对象实现远程调用是通过把共享对象打成jar包被不同微服务共享依赖的,也是分布式系统中的典型反模式,当一个领域事件被修改后,每个依赖的微服务都会受到影响。

使用SCS通过Spring Message的公共消息事件机制,可以支持事件驱动架构,同时避免依赖共享Domain对象类型。下面我们在SCS的一些元注解的基础上结合Spring的一些小特性实现类似CORS的EDA架构。

SpringCloudStream处理事件

SCS提供了@StreamListener注解来控制序列化的方式,它作为方法的入参并执行方法,例如:

新的事件分发特性在@StreamListener上增加了Condition属性来使消息路由到多个监听器成为可能,Condition的值是用SPEL表达式运算出来的一个boolean值。Condition应用到传入的消息上,能够计算任何消息载荷、特定的消息头或其组合。这提供了一种极其灵活的路由机制,且不需要不同的事件类型定义类。例如,我们定义一个带String eventType属性的Event类型,SCS将提供开箱即用的功能:

其中,Event类型的定义如下:

定制化事件注解

虽 然 可 以 使 用 通 用 的 Event 类 型 , 但 是 仍 然 需 要 通 过@StreamListener注解加入SEL Condition注解来过滤,使用起来比较麻烦。现在我们基于@StreamListener注解实现自定义事件注解,我们通过事件类型直接定位到我们的方法。自定义注解@EventHandler的定义如下:

通过@EventHandler的定义,我们可以把事件监听注解简化为如下形式:

这里,我们可以通过将Condition表达式转化为一个模板实现,重载 SCS 处 理 @StreamListener 注 解 的 BeanPostProcessor , 这 样 通 过eventType就可以实现识别事件的方法。重载的函数如下:

接下来,我们可以用自定义的@EnableEventHandling注解来引入这个configuration:

我 们 修 改 EventHandler 注 解 , 定 义 一 个 eventType 属 性 来 做Condition的别名:

然后,我们可以使用自定义的事件处理注解,只需要提供事件类型,就可以从消费者发送订阅事件:

微服务集成架构倾向于使用标准化的HTTP、基于REST API的架构交互模式进行集成。此外,考虑到性能也可以采用RPC的调用方式。对于异步交互过程,使用消息队列可以实现微服务之间的充分解耦和异构集成。

Spring Cloud提供了Spring Cloud Stream框架,它可以屏蔽底层通信技术细节,并且实现了基于消息的轻量级微服务集成解决方案。

还可用使用Spring Cloud Stream实现基于事件驱动和CQRS的系统架构。

本文给大家讲解的内容是MOM异步通信,Stream应用进阶

  1. 下篇文章给大家讲解的内容是微服务数据架构,数据分类及存储特性,关系数据库概述
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!

本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 愿天堂没有BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Stream应用进阶
  • SpringCloudStream处理事件
  • 定制化事件注解
  • 本文给大家讲解的内容是MOM异步通信,Stream应用进阶
相关产品与服务
流计算 Oceanus
流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的企业级实时大数据分析平台,具备一站开发、无缝连接、亚秒延时、低廉成本、安全稳定等特点。流计算 Oceanus 以实现企业数据价值最大化为目标,加速企业实时化数字化的建设进程。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档