我相信在這個問題上存在誤解,因爲您認爲事件驅動的體系結構無法在HTTP之上實現。
事件驅動的體系結構可以以許多不同的方式實現,並且(當體系結構是分佈式系統時),可以在許多不同的協議之上實現。
它也可以使用消息代理(即Kafka,RabbitMQ,ActiveMQ等)來實現。但是,這只是一個選擇,當然不是唯一的方法。
例如,重要著作Building Microservices由山姆·紐曼,在第4章:集成,基於事件實現異步協作下稱:
「另一種方法是嘗試使用HTTP作爲傳播的一種方式 事件。 ATOM是一個符合REST的規範,它定義了用於發佈資源提要的語義 (等等)。許多客戶端存在 庫,這些庫允許我們創建和使用這些供稿。所以 當我們的客戶服務發生變化時,我們的客戶服務可能會將活動發佈到這樣的訂閱源。我們的消費者只是輪詢飼料, 尋找變化。一方面,我們可以重複使用現有的ATOM規範和任何相關庫的事實很有用,我們知道HTTP處理能夠很好地擴展。然而,HTTP不是 擅長於低延遲(一些消息代理商擅長),我們仍然需要處理消費者需要跟蹤他們看到的消息並管理他們自己的輪詢時間表的事實。
我看到人們度過一個時代實現你得到的開箱即用適當的消息 經紀人才能ATOM工作了一段用例的 行爲越來越多。例如,競爭消費者模式描述了一種方法,通過這種方法,您可以調用多個工人實例來競爭消息,這可以很好地工作來擴大工作人員的數量,以處理獨立的 作業列表。但是,我們希望避免兩個或更多工作人員看到相同消息的情況,因爲我們最終會完成比 需要更多的相同任務。使用消息代理,標準隊列將處理這個問題。 通過ATOM,我們現在需要管理我們自己在所有 工作人員之間的共享狀態,以儘量減少複製工作的機會。如果您的 已經擁有可用的良好彈性消息代理,請考慮使用它來處理髮布和訂閱事件。但是 如果你還沒有一個,請給ATOM一看,但要注意沉沒成本謬誤。如果您發現自己希望獲得消息代理提供的越來越多的支持,那麼在某個時候,您可能想要改變您的方法 。」
同樣的,如果你的設計採用事件驅動架構的消息代理,然後我不知道是否需要一個斷路器,因爲在這種情況下,消費應用控制的速率事件消息正在從隊列中消耗。生產者應用程序可以按照自己的速度發佈事件消息,消費者應用程序可以添加儘可能多的競爭消費者,以便跟上這一步伐。如果服務器應用程序關閉,則客戶端應用程序仍然可以繼續使用隊列中剩餘的任何消息,並且一旦隊列爲空,它們將繼續等待更多消息到達。但是這並沒有給生產者應用帶來任何負擔。在這種情況下,生產者和消費者應用程序是分開的,斷路器在其他情況下所做的所有工作都將由消息代理應用程序解決。
可以說服務發現功能有些類似。由於生產者和消費者之間並不直接對話,而只能通過消息中介,所以你需要發現的唯一服務就是消息中介。