基于事件的架構工作機制和相關產品

基于事件的架構

基于事件的架構可否這樣理解,每個事件相當于傳統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.pswp.cn/bicheng/18281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18281.shtml
英文地址,請注明出處:http://en.pswp.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;使得子組件可以沿著一個軸滑動進入或滑動退出視圖。這種動畫效果常用于頁面轉場、菜單展開收起、元素的添加…