AxonFramework,事件發佈和處理

由應用程序生成的事件需要被分發到更新查詢數據庫的組件,搜索引擎或其他需要它們的資源:事件處理程序(Event Handlers)。事件總線(Event Bus)的職責是分發事件消息到所有感興趣的組件。接收端,事件處理器(Event Processors)負責處理這些事件,其中包括相應的事件處理程序(Event Handlers)的調用。

發佈事件(Publishing Events)

在絕大多數情況下,聚合將通過申請(applying)它們發佈事件。然而,有時候也有必要發佈一個事件(可能來自另一個組件),直接到事件總線。發佈一個事件,在EventMessage中簡單封裝描述事件的有效負載(payload)。

GenericEventMessage.asEventMessage(Object)方法允許你將任何對象包裝成EventMessage。如果傳遞的對象已經是EventMessage,它只是返回。

事件總線(Event Bus)

EventBus是分發事件到已訂閱的事件處理器的機制。Axon 提供了兩個事件總線的實現:SimpleEventBus和EmbeddedEventStore。兩個實現都支持訂閱和跟蹤處理器(processor),EmbeddedEventStore持久化事件,它允許你在以後的階段重放它們。SimpleEventBus有一個易失性存儲器,然後一旦事件已經發布到訂閱組件上,就會“忘記”它們。

當使用配置API時,默認情況下使用SimpleEventBus。配置EmbeddedEventStore則相反,需要提供一個StorageEngine的實現,它對事件進行實際存儲。

Configurer configurer = DefaultConfigurer.defaultConfiguration();
configurer.configureEmbeddedEventStore(c -> new InMemoryEventStorageEngine());

Event Processors

事件處理程序(Event Handlers)定義了接收事件時執行的業務邏輯。事件處理器(Event Processors)負責解決該過程的技術方面的組件。它們啓動一個工作單元,也可能一個事務,並且確保相關的數據在事件處理期間,可以正確附加到所有創建的消息上。

事件處理器大致有兩種形式:訂閱和跟蹤。訂閱事件處理器訂閱它們自己給事件源,並由發佈機制管理的線程調用。另一方面,跟蹤事件處理器使用自己管理的線程從源中取出它們的消息。

將處理程序分配給處理器

所有處理器都有一個名稱,它跨JVM實例標識一個處理器實例。兩個名稱相同的處理器,可以被認爲是同一處理器的兩個實例。
所有事件處理程序都被附加到一個處理器,它的名字是事件處理程序類的包名。
例如, 下面的類:

  • org.axonframework.example.eventhandling.MyHandler,
  • org.axonframework.example.eventhandling.MyOtherHandler
  • org.axonframework.example.eventhandling.module.MyHandler

將觸發兩個處理器的創建:

  • org.axonframework.example.eventhandling with 2 handlers, and
  • org.axonframework.example.eventhandling.module with a single handler

配置API允許你爲分配的類配置其他策略給處理器,甚至將特定實例分配給特定的處理器。

配置處理器

默認情況下,Axon將使用訂閱事件處理器。這是有可能改變處理程序是如何分配和如何使用配置API的EventHandlingConfiguration類配置處理器的。

EventHandlingConfiguration類定義了一些的方法,可用於定義處理器需要如何配置。

  • registerEventProcessorFactory允許你定義一個默認的工廠方法,創建沒有明確定義工廠的事件處理器。
  • registerEventProcessor(String name, EventProcessorBuilder builder)定義了用於創建一個帶有給定名稱的處理器的工廠方法。注意,此種處理器只有當名稱被選擇作爲任何可用的事件處理程序bean的處理器時纔會創建。

  • registerTrackingProcessor(String name)定義了一個帶有給定名稱的處理器,使用默認設置,應該被配置成一個跟蹤事件處理器。它使用TransactionManager和TokenStore配置。

  • usingTrackingProcessors()設置默認跟蹤處理器,而不是訂閱處理器。

跟蹤處理器不像訂閱處理器,需要一個令牌存儲來存儲它們的進程。跟蹤處理器通過其事件流接收的每個消息都伴隨着一個令牌。這個令牌允許處理器在任何以後的點重新打開流,並在最後一個事件中提取它。

配置API負責令牌存儲,以及大多數其他組件處理器需要從全局配置實例。如果沒有明確定義TokenStore ,在生產中不推薦使用InMemoryTokenStore。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章