AxonFramework,SpringBoot自動配置 轉

Axon支持的SpringBoot自動配置是迄今爲止開始配置Axon基礎設施組件最簡單的選擇。只需添加axon-spring-boot-starter依賴性,Axon會自動配置基礎設施組件(命令總線,事件總線),以及運行和儲存聚合和Saga所需的任何組件。

根據在應用程序上下文中的其他組件,如果他們在應用程序上下文中不是已經明確定義,Axon將定義某些組件。這意味着只需要配置不同於默認值的組件。

事件總線和事件存儲配置

如果JPA可用,事件存儲默認使用JPA事件存儲引擎。這允許聚合的存儲使用事件溯源而無需任何明確的配置。
如果JPA不可用,Axon默認使用SimpleEventBus,這意味着你需要爲每個聚合指定一個非事件溯源存儲庫,或者在你的Spring配置中配置一個EventStorageEngine 。

配置一個不同的事件存儲引擎,即使JPA在class path上,只需定義一個EventStorageEngine類型的bean (使用事件溯源)或EventBus(如果不需要事件溯源)。

命令總線配置

如果在應用程序上下文中沒有顯式定義CommandBus實現,Axon會配置一個SimpleCommandBus。這個CommandBus將使用PlatformTransactionManager管理事務,如果它在上下文中可用。

如果只有CommandBus bean定義是一個DistributedCommandBus實現,Axon仍將配置一個CommandBus實現作爲DistributedCommandBus本地segment。這個bean將獲取一個“localSegment”限定符。建議定義DistributedCommandBus爲@Primary,以便它優先考慮依賴注入。

聚合配置

@Aggregate註解(在org.axonframework.spring.stereotype包中)觸發自動配置,配置使用帶註解的類型的必要組件作爲聚合 。注意,只有聚合根需要註解。

Axon會用命令總線自動註冊所有帶@CommandHandler註解的方法,並且如果不存在則建立一個存儲庫。

建立一個與默認情況不同的存儲庫,在應用程序上下文中定義一個。可選地,你可以定義要使用的存儲庫的名稱,在@Aggregate上使用存儲庫屬性。如果沒有定義存儲庫屬性,Axon將嘗試以聚合的名稱使用存儲庫(第一個字符小寫),後綴爲存儲庫。依此類推,一個MyAggregate類的類型,默認的存儲庫名字叫myAggregateRepository。如果沒有找到那個名稱的bean,Axon將定義一個EventSourcingRepository(如果沒有EventStore可用其會失敗)。

Saga配置

基礎設施組件的配置操作的Saga是@Saga註解觸發的(在org.axonframework.spring.stereotype包中)。Axon會配置一個SagaManagert和SagaRepository。SagaRepository將在上下文中使用一個可用的SagaStore(如果找到JPA默認爲JPASagaStore)爲實際Saga存儲。

爲Saga使用不同的SagaStores,在每個@Saga註解的sagaStore屬性中,提供要使用的SagaStore的bean名稱。
Saga將從應用程序上下文中注入資源。注意,這並不意味着Spring-injecting用於注入這些資源。@Autowired和@javax.inject.Inject註解可用於標定依賴關係,但它們由Axon通過尋找這些被註解的字段和方法來注入。構造函數注入(還)不支持。

事件處理(Event Handling)配置

默認情況下,所有單例Spring bean組件包含帶@EventHandler註解的方法,將訂閱一個事件處理器去接收事件消息發佈到事件總線。

EventHandlingConfiguration bean,在應用程序上下文可用,有方法來調整事件處理程序的配置。有關詳細信息,請參閱配置API配置事件處理程序和事件處理器。

更新事件處理(EventHandling)配置,創建一個autowired方法,設置你想要的配置:

@Autowired
public void configure(EventHandlingConfiguration config) {
    config.usingTrackingProcessors(); // default all processors to tracking mode.
}

事件處理器((Event Processors)的某些方面也可以在application.properties中配置。

axon.eventhandling.processors["name"].mode=tracking
axon.eventhandling.processors["name"].source=eventBus

使用application.yml:

axon:
    eventhandling:
        processors:
            name:
                mode: tracking
                source: eventBus

源文件屬性指的是bean的名稱實現了SubscribableMessageSource或StreamableMessageSource,名稱應該被用來做上述處理器的事件源。源文件默認事件總線或事件存儲在應用程序上下文中定義。

啓用AMQP

啓用AMQP支持,確保axon-amqp模塊在類路徑上,並且在應用程序上下文中AMQP ConnectionFactory是可用的(例如通過引用spring-boot-starter-amqp)。
在應用程序中轉發生成的事件到一個AMQP Channel,一行application.properties配置就夠了:

axon.amqp.exchange=ExchangeName

這將以給定的名稱自動發送所有已經發布的事件到AMQP Channel。

默認情況下,發送時沒有使用AMQP事務。這可以使用axon.amqp.transaction-mode屬性覆蓋,並設置它爲事務或publisher-ack。

從隊列中接收事件,並在Axon應用程序內處理它們,你需要配置一個SpringAMQPMessageSource:

@Bean
public SpringAMQPMessageSource myQueueMessageSource(AMQPMessageConverter messageConverter) {
    return new SpringAMQPMessageSource(messageConverter) {

        @RabbitListener(queues = "myQueue")
        @Override
        public void onMessage(Message message, Channel channel) throws Exception {
            super.onMessage(message, channel);
        }
    };
}

然後配置一個處理器,使用這個bean作爲其消息來源:

axon.eventhandling.processors["name"].source=myQueueMessageSource

使用JGroups分發命令

進行中…如果你不能等,添加一個依賴項到axon-spring-boot-starter-jgroups模塊。



作者:勇赴
鏈接:http://www.jianshu.com/p/d843fe8bd7d1
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

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