Axon支持的SpringBoot自動(dòng)配置是迄今為止開始配置Axon基礎(chǔ)設(shè)施組件最簡(jiǎn)單的選擇。只需添加axon-spring-boot-starter依賴性蚓挤,Axon會(huì)自動(dòng)配置基礎(chǔ)設(shè)施組件(命令總線灿意,事件總線)崇呵,以及運(yùn)行和儲(chǔ)存聚合和Saga所需的任何組件域慷。
根據(jù)在應(yīng)用程序上下文中的其他組件,如果他們?cè)趹?yīng)用程序上下文中不是已經(jīng)明確定義抵窒,Axon將定義某些組件李皇。這意味著只需要配置不同于默認(rèn)值的組件宙枷。
事件總線和事件存儲(chǔ)配置
如果JPA可用,事件存儲(chǔ)默認(rèn)使用JPA事件存儲(chǔ)引擎圃阳。這允許聚合的存儲(chǔ)使用事件溯源而無需任何明確的配置捍岳。
如果JPA不可用,Axon默認(rèn)使用SimpleEventBus页徐,這意味著你需要為每個(gè)聚合指定一個(gè)非事件溯源存儲(chǔ)庫变勇,或者在你的Spring配置中配置一個(gè)EventStorageEngine 贴唇。
配置一個(gè)不同的事件存儲(chǔ)引擎戳气,即使JPA在class path上,只需定義一個(gè)EventStorageEngine類型的bean (使用事件溯源)或EventBus(如果不需要事件溯源)麻捻。
命令總線配置
如果在應(yīng)用程序上下文中沒有顯式定義CommandBus實(shí)現(xiàn)贸毕,Axon會(huì)配置一個(gè)SimpleCommandBus夜赵。這個(gè)CommandBus將使用PlatformTransactionManager管理事務(wù)寇僧,如果它在上下文中可用。
如果只有CommandBus bean定義是一個(gè)DistributedCommandBus實(shí)現(xiàn)歌豺,Axon仍將配置一個(gè)CommandBus實(shí)現(xiàn)作為DistributedCommandBus本地segment心包。這個(gè)bean將獲取一個(gè)“l(fā)ocalSegment”限定符蟹腾。建議定義DistributedCommandBus為@Primary区宇,以便它優(yōu)先考慮依賴注入。
聚合配置
@Aggregate注解(在org.axonframework.spring.stereotype包中)觸發(fā)自動(dòng)配置炉爆,配置使用帶注解的類型的必要組件作為聚合 芬首。注意,只有聚合根需要注解郁稍。
Axon會(huì)用命令總線自動(dòng)注冊(cè)所有帶@CommandHandler注解的方法耀怜,并且如果不存在則建立一個(gè)存儲(chǔ)庫。
建立一個(gè)與默認(rèn)情況不同的存儲(chǔ)庫掰派,在應(yīng)用程序上下文中定義一個(gè)狈究。可選地亿眠,你可以定義要使用的存儲(chǔ)庫的名稱纳像,在@Aggregate上使用存儲(chǔ)庫屬性拯勉。如果沒有定義存儲(chǔ)庫屬性,Axon將嘗試以聚合的名稱使用存儲(chǔ)庫(第一個(gè)字符小寫)岔帽,后綴為存儲(chǔ)庫导绷。依此類推妥曲,一個(gè)MyAggregate類的類型,默認(rèn)的存儲(chǔ)庫名字叫myAggregateRepository褂萧。如果沒有找到那個(gè)名稱的bean葵萎,Axon將定義一個(gè)EventSourcingRepository(如果沒有EventStore可用其會(huì)失敗)。
Saga配置
基礎(chǔ)設(shè)施組件的配置操作的Saga是@Saga注解觸發(fā)的(在org.axonframework.spring.stereotype包中)谎痢。Axon會(huì)配置一個(gè)SagaManagert和SagaRepository。SagaRepository將在上下文中使用一個(gè)可用的SagaStore(如果找到JPA默認(rèn)為JPASagaStore)為實(shí)際Saga存儲(chǔ)掰烟。
為Saga使用不同的SagaStores纫骑,在每個(gè)@Saga注解的sagaStore屬性中九孩,提供要使用的SagaStore的bean名稱。
Saga將從應(yīng)用程序上下文中注入資源煤墙。注意宪拥,這并不意味著Spring-injecting用于注入這些資源她君。@Autowired和@javax.inject.Inject注解可用于標(biāo)定依賴關(guān)系缔刹,但它們由Axon通過尋找這些被注解的字段和方法來注入。構(gòu)造函數(shù)注入(還)不支持校镐。
事件處理(Event Handling)配置
默認(rèn)情況下鸟廓,所有單例Spring bean組件包含帶@EventHandler注解的方法,將訂閱一個(gè)事件處理器去接收事件消息發(fā)布到事件總線肝箱。
EventHandlingConfiguration bean稀蟋,在應(yīng)用程序上下文可用退客,有方法來調(diào)整事件處理程序的配置链嘀。有關(guān)詳細(xì)信息,請(qǐng)參閱配置API配置事件處理程序和事件處理器档玻。
更新事件處理(EventHandling)配置误趴,創(chuàng)建一個(gè)autowired方法,設(shè)置你想要的配置:
@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的名稱實(shí)現(xiàn)了SubscribableMessageSource或StreamableMessageSource枣申,名稱應(yīng)該被用來做上述處理器的事件源忠藤。源文件默認(rèn)事件總線或事件存儲(chǔ)在應(yīng)用程序上下文中定義模孩。
啟用AMQP
啟用AMQP支持贮缅,確保axon-amqp模塊在類路徑上,并且在應(yīng)用程序上下文中AMQP ConnectionFactory是可用的(例如通過引用spring-boot-starter-amqp)祭芦。
在應(yīng)用程序中轉(zhuǎn)發(fā)生成的事件到一個(gè)AMQP Channel龟劲,一行application.properties配置就夠了:
axon.amqp.exchange=ExchangeName
這將以給定的名稱自動(dòng)發(fā)送所有已經(jīng)發(fā)布的事件到AMQP Channel轴或。
默認(rèn)情況下照雁,發(fā)送時(shí)沒有使用AMQP事務(wù)饺蚊。這可以使用axon.amqp.transaction-mode屬性覆蓋,并設(shè)置它為事務(wù)或publisher-ack裕坊。
從隊(duì)列中接收事件籍凝,并在Axon應(yīng)用程序內(nèi)處理它們,你需要配置一個(gè)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);
}
};
}
然后配置一個(gè)處理器声诸,使用這個(gè)bean作為其消息來源:
axon.eventhandling.processors["name"].source=myQueueMessageSource
使用JGroups分發(fā)命令
進(jìn)行中…如果你不能等彼乌,添加一個(gè)依賴項(xiàng)到axon-spring-boot-starter-jgroups模塊囤攀。