2009-11-02 44 views
34

我想知道當我們引用SOA或中間件時,以及通常在應用程序和企業集成情況下,消息驅動環境和事件驅動環境之間是否存在明顯的區別。我知道用戶界面類似於事件驅動模型,我們的系統攔截用戶的操作。消息驅動與應用程序集成的事件驅動方法

而且很顯然,基於發佈/訂閱,採用同步或異步通信消息支持系統,交易等

但有中間件/ SOA /應用集成方面有區別嗎? (架構級)。我正在嘗試查閱維基百科(herehere)等來源,但我仍然有些困惑。開發人員何時應該選擇一種解決方案?

是否有例子或案例,一種方法比另一種更有意義?或者有任何全面的資源和指導來實施每一個?

非常感謝任何見解。

回答

15

對「有明顯區別」的簡短回答是「否」。

這些術語不是完全可以互換的,但意味着相同的基本架構 - 特別是您將觸發事件或消息。

您引用的第一篇文章是關於低級管道系統,即代表您傳輸郵件的MOM或pub-sub「公交」。事件驅動的體系結構是您在該框架之上構建的。

術語事件驅動,同時也適用於GUI代碼,並不是真正處於相同的抽象層次。在這種情況下,與沿着消息/事件驅動的線路構建整個企業相比,它是一個小型模式。

7

事件驅動的體系結構可以實現帶或不帶消息。消息傳遞是以可靠,有保證的方式將生產者提出的事件傳達給消費者的一種方式。特別是當生產者和消費者真正解耦時,可能託管在不同的服務器/虛擬機/環境中,並且無法直接訪問任何共享內存。

但是,在特定情況下 - 當事件的使用者是在同一應用程序本身內註冊的函數/回調,或者需要同步執行使用者時,則可以實現無需消息傳遞的事件訂閱。

2

因爲它很好地放在this文章中,爲了理解事件驅動的設計,我們不必看它呈現的是什麼,而是要觀察它隱藏的內容,這只不過是編程的基礎; 「調用棧」。

在事件驅動設計中,方法調用的定義直接從窗口中移出。沒有更多的呼叫者和被叫者。這是一個接吻順序和順序的吻。系統不需要知道事情發生的順序。因此,共享內存空間(這是調用堆棧的先決條件)變得不必要。

但是,在調用堆棧環境中,不僅調用者必須知道接下來會發生什麼,而且必須能夠將功能與方法名稱相關聯。

默認情況下,面向消息的應用程序會刪除共享內存。發佈者和訂閱者不需要共享內存空間。另一方面,所有其他特徵(即順序,方法名稱耦合等)都不是必需的。

如果消息傳遞是爲了符合事件驅動架構的公理而設計的,它們可以被認爲是相同的。否則,它們之間存在巨大的差異。

0

如果我們使用事件驅動的方法,我們通常希望在這個事件中發送源對象 - 發佈事件的組件。因此,在訂戶中,我們不僅可以獲取數據,還可以知道誰發佈了此事件。例如。在移動開發中,我們會收到View,它可以是Button,Image或一些自定義View。根據這個視圖的類型,我們可以在用戶中使用不同的邏輯。在這種情況下,我們甚至可以添加一些後處理,修改源組件 - 例如將動畫添加到這些源視圖。

當我們使用消息驅動的方法時,我們只想發佈帶有一些數據的消息。發佈此消息的訂閱者無關緊要,我們只是想接收數據並進行處理。

30

這是關於JonasBonér問題的Typesafe/Reactive的觀點。從this blog post的第三段可以看出:「不同之處在於消息是定向的,事件不是 - 消息具有明確的可尋址收件人,而其他人(0-N)發生的事件只是爲了觀察它。」

+0

由於我們可以在0-N可尋址接收者之間廣播消息,所以也值得強調直接的詞。 – 4lex1v 2015-10-08 06:31:09

0

事件驅動體系結構和消息驅動體系結構是兩個不同的東西,並解決了兩個不同的問題。

事件驅動架構重點在於如何觸發系統正常工作。在EDA環境中被認爲是事件的大多數觸發事件是通過鍵盤和鼠標以外的方式生成的事件。這是一個EDA,如果這使我們明確地考慮事件發生器,事件通道,事件處理引擎。

鍵盤和鼠標是顯而易見的事件發生器,但是處理這些事件已經被各種框架或運行時間所關注,並且作爲架構師我們不需要擔心它。還有一些特定於某個領域的事件是建築師應該考慮的。示例 - 供應鏈管理事件 - 選擇,包裝,派送,分銷,零售商,銷售等。從工業物聯網類型應用的技術角度來看,事件包括:RFID讀取,生物度量讀取,傳感器數據,條形碼掃描,系統生成的事件是需要明確照顧的事件,因爲這些事件驅動系統的功能。

消息驅動體系結構的重點是通過使用標準面向消息中間件將消息從一個模塊傳遞到系統的另一個模塊來集成分佈式系統。

14

很久以前,這個問題被問到。我認爲,一個更加現代化和明確的迴應是由Reactive ManifestoMessage-Driven (in contrast to Event-Driven)給出:

的消息是發送到特定目標數據項。事件是組件在達到給定狀態時發出的信號。在一個消息驅動的系統中,可尋址的收件人等待消息的到達並對它們作出反應,否則將處於休眠狀態。在事件驅動的系統中,通知監聽器被附加到事件源,以便在事件發出時被調用。這意味着事件驅動的系統專注於可尋址的事件源,而消息驅動的系統專注於可尋址的收件人。消息可以包含編碼事件作爲其有效負載。

相關問題