基于事件的架构工作机制和相关产品

基于事件的架构

基于事件的架构可否这样理解,每个事件相当于传统API的一次函数调用请求,比如Add(123,456)。区别在于,基于事件的架构只是把这个请求发出,并不急于得到结果,而是等合适的子系统处理完这个请求,发出Reply(Add(123,456)),最初的请求者再通过事件代理或中介处取回自己想要的结。这样理解对吗?

这种理解基本上是正确的,但基于事件的架构(Event-Driven Architecture, EDA)与传统API调用之间还是存在一些关键性的区别。在EDA中,事件的发布与接收是解耦的,这意味着事件的发送者(生产者)并不需要知道也不关心哪个服务或组件会处理这个事件,它只需要将事件发布到事件总线或消息队列上。同样,事件的接收者(消费者)也不需要知道事件是从哪里来的,它只需要关注自己感兴趣的事件类型,并在这些事件发生时作出响应。

以下是对上述描述的几点进行细化和澄清:

  1. 请求发出与结果获取

    • 在EDA中,当某个组件发出一个事件(比如Add(123,456)),它并不像传统API调用那样期待立即得到一个返回结果。相反,它是将事件发布到事件系统中,然后就不再关心后续的处理过程。
    • 事件的消费者(处理者)会在适当的时候异步地处理这个事件,并可能产生进一步的事件作为处理结果。这个结果事件可能是一个新的、独立的事件,而不是直接回复给原始事件的发送者。
  2. 事件处理与回复

    • 在EDA中,通常不会有一个直接的“Reply(Add(123,456))”这样的回复机制,因为事件的发送者和接收者是解耦的。如果处理结果需要以某种方式通知原始请求者,这通常是通过发布另一个事件来实现的,这个新事件可能由另一个服务或组件来监听和处理。
    • 例如,库存服务在处理了“订单创建事件”后,可能会发布一个“库存更新事件”,而这个事件可能被其他关心库存状态的服务所监听。
  3. 事件代理或中介

    • 事件总线或消息队列在EDA中扮演了重要的角色,它们作为事件的传输层,负责将事件从发送者传递到接收者。这些中间件通常提供消息的持久化、路由、过滤和负载均衡等功能。
    • 与传统API调用不同,EDA中的事件代理或中介允许事件的发送者和接收者在时间和空间上进行解耦,这增加了系统的灵活性和可扩展性。

总的来说,基于事件的架构强调的是异步、解耦和事件驱动的通信模式,这与传统的同步API调用有很大的不同。上述理解捕捉到了EDA的一些核心特性,但需要注意的是,在EDA中,事件的发送和处理通常是异步和解耦的,而且通常不会有一个直接的回复机制来连接事件的发送者和接收者。

相关EDA产品

基于事件的架构(EDA)可以通过多种软件产品来实现。以下是一些可以用于构建EDA的软件产品和技术:

消息队列:
RabbitMQ:一个开源的消息队列软件,它支持多种消息协议(AMQP,STOMP,MQTT等),并能够在分布式系统中提供可靠的消息传递。
Apache Kafka:一个分布式流处理平台,它允许发布和订阅记录流,类似于消息队列或企业消息系统。Kafka具有高吞吐量、低延迟、容错等特性,非常适合用于构建EDA。
事件流处理平台:
Apache Flink:一个开源流处理框架,用于进行实时数据分析和处理。Flink提供了丰富的API来处理无界和有界数据流,并支持事件时间处理和状态管理,使得它成为EDA中实现复杂事件处理的有力工具。
Apache Beam:一个统一的编程模型和执行引擎,用于批处理和流处理。Beam模型可以简化在不同执行引擎之间迁移的复杂性,并提供一致的API来处理事件流。
事件数据库:
Event Store:一个专门为事件溯源设计的数据库。它允许你存储、查询和订阅事件流,非常适合用于EDA中实现事件的持久化和查询。
事件网格服务:
一些云服务提供商(如AWS EventBridge、Azure Event Grid等)提供事件网格服务,这些服务允许你在云环境中轻松地发布、订阅和处理事件。这些服务通常与云提供商的其他服务(如存储、计算、数据库等)紧密集成,为构建EDA提供了便利。
集成平台和中间件:
一些集成平台和中间件产品(如MuleSoft Anypoint Platform、Informatica Cloud Integration等)也提供了对EDA的支持。这些平台通常包含消息队列、事件处理、数据转换和路由等功能,可以帮助你快速构建和部署EDA解决方案。
请注意,选择哪种软件产品来实现EDA取决于你的具体需求和场景。在选择时,你应该考虑产品的功能、性能、易用性、成本以及与其他系统的兼容性等因素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/18281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go select

select 是与 switch 相似的控制结构,与 switch 不同的是,select 中虽然也有多个 case,但是这些 case 中的表达式必须都是 channel 的收发操作。 select 能够让 goroutine 同时等待多个 channel 可读或者可写,在多个 channel 状态改…

使用awk对nginx access.log进行统计分析

nginx可以配置访问日志,如果我们要对日志文件进行统计分析,在linux环境下可以借助awk命令完成。 日志格式配置如下所示: log_format access_json {"timestamp":"$time_iso8601","host":"$server_addr&qu…

Flutter 中的 AnimatedOpacity 小部件:全面指南

Flutter 中的 AnimatedOpacity 小部件:全面指南 在Flutter中,动画是一种为用户提供视觉反馈和增强用户体验的强大工具。AnimatedOpacity是Flutter动画库中的一个组件,它允许你通过改变一个组件的透明度来创建淡入和淡出效果。本文将详细介绍…

章十五、Maven —— Maven 简介、Maven 开发环境搭建、命令、打包案例

一、 Maven 简介 Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系(在A.jar文件中用到了B.jar)、完成项目的编译(.java -&g…

Compose Button移除水波纹效果

一、背景 在使用Compose实现Button按钮时,设计要求移除按钮的水波纹效果,只保留按压效果,经查Compose1.4.3版本中,并没有直接移除水波纹的能力 二、遇到问题 经过多次尝试,使用Compose的Button组件始终无法实现目标效…

html通过数据改变,图片跟着改变

改变前 改变后 通过数据来控制样式展示 <template><div>通过num控制图标是否更改{{num}}<div class"box"><!-- 如果num大于1则是另一种&#xff0c;样式&#xff0c;如果小时1&#xff0c;则是另一种样式 --><div class"item&qu…

android怎么告诉系统不要回收

在Android中&#xff0c;如果你想告诉系统不要回收你的应用程序&#xff0c;可以通过设置Activity的属性来实现。你可以设置android:configChanges属性&#xff0c;指定在哪些配置更改时不重新创建Activity。 例如&#xff0c;如果你想指示系统在屏幕方向更改时不要重新创建Ac…

又是一知识点

1.说一下什么是mvvm模式 Model代表数据模型&#xff0c;数据和业务逻辑都在Model层中定义&#xff1b;View代表UI视图&#xff0c;负责数据的展示&#xff1b;ViewModel负责监听Model中数据的改变并且控制视图的更新&#xff0c;处理用户交互操作&#xff1b; View 的变化会自…

小阿轩yx-Shell 编程之循环语句与函数

小阿轩yx-Shell 编程之循环语句与函数 for 循环语句 可以很好地解决顺序编写异常烦琐、困难重重的全部代码 &#xff08;&#xff09;{}&#xff1a;里边写的都是命令 &#xff09;&#xff1a;不能嵌套 $&#xff08;&#xff09;&#xff1a;可以嵌套&#xff0c;适合更…

day42 62.不同路径 63. 不同路径 II

62.不同路径 思路 机器人从(0 , 0) 位置出发&#xff0c;到(m - 1, n - 1)终点。 按照动规五部曲来分析&#xff1a; 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j] &#xff1a;表示从&#xff08;0 &#xff0c;0&#xff09;出发&#xff0c;…

2-Django项目进阶--继续学生管理系统

目录 项目框架: urls.py views.py modules.py class_data.html add_and_modify.html add_stu.html 笔记: 继承语法 模板继承总结&#xff1a; 班级添加 add_and_modify.html 修改添加公用一个页面即可 views.py 班级修改 views.py url.py 班级删除 views.py…

boost asio异步服务器(2)实现伪闭包延长连接生命周期

闭包 在函数内部实现一个子函数&#xff0c;子函数的作用域内能访问外部函数的局部变量。闭包就是能够读取其他函数内部变量。但是由于闭包会使得函数中的变量都被保存在内存中&#xff0c;内存消耗很大&#xff0c;所以不能滥用闭包&#xff0c;否则会造成程的性能问题&#x…

构造器--5.28

不用一个个属性赋值的方法&#xff1a; 知道了类的创建与使用&#xff0c;但是每次赋值都是一个个调用&#xff0c;我们可以用构造器使得方法简单一点&#xff0c;不用一个个调用属性赋值&#xff0c;直接传参就OK了&#xff1b; 点击类名然后ctrl可以查看构造器 public yanxi…

C++完成特色旅游管理信息系统

背景&#xff1a; 继C完成淄博烧烤节管理系统后&#xff0c;我们来到了特色旅游管理信息系统的代码编写&#xff0c;历史链接点下方。 C完成淄博烧烤节管理系统_淄博烧烤总账管理系统的-CSDN博客 问题描述&#xff1a; 为了更好的管理各个服务小组&#xff0c;开发相应的管…

民国漫画杂志《时代漫画》第30期.PDF

时代漫画30.PDF: https://url03.ctfile.com/f/1779803-1248635414-87c8c8?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

webpack打包配置项

webpack打包配置项 在config.js 中 module.exports {publicPath: process.env.NODE_ENV production ? / : /, //静态资源目录outputDir: dist, //打包名称assetsDir: static,//静态资源&#xff0c;目录devServer: {port: port,open: false,overlay: {warnings: false,erro…

SpringBoot自动装配源码

自动装配&#xff1a; 实际上就是如何将Bean自动化装载到IOC容器中管理&#xff0c;Springboot 的自动装配时通过SPI 的方式来实现的 SPI&#xff1a;SpringBoot 定义的一套接口规范&#xff0c;这套规范规定&#xff1a;Springboot 在启动时会扫描外部引用 jar 包中的META-IN…

css 渐变色边框

效果图&#xff1a; 代码&#xff1a; <style>:root{--br-radius: 12px;}.list{position: relative;}.list_tle{margin-top: 15px;margin-bottom: 5px;}.item{position: relative;display: inline-flex;} .br1 {padding: 10px 16px;clip-path: inset(0 round 6px);borde…

官宣|HelpLook现已入驻钉钉应用市场,助力企业知识管理知识

前一阵子OpenAI公司最新的GPT-4o技术震撼发布&#xff0c;人工智能的实际应用前景再次引起行业瞩目&#xff0c;或者被GPT4o的数据分析等特色功能折服。如您正寻求将AI技术融入企业知识管理&#xff0c;不要错过HelpLook&#xff01;HelpLook AI知识库已经正式入驻钉钉应用市场…

Flutter 中的 SlideTransition 小部件:全面指南

Flutter 中的 SlideTransition 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;SlideTransition 是一个动画组件&#xff0c;用于创建滑动动画效果&#xff0c;使得子组件可以沿着一个轴滑动进入或滑动退出视图。这种动画效果常用于页面转场、菜单展开收起、元素的添加…