How to configure multiple event stores?

Hello,

I am looking to use Axon Server for our event store for all new services going forward, but I have older services where I am currently using mongo for the event store. Ultimately we are planning to leave mongo, but have other dependencies which will need to be modified to make this happen. In the mean time, I would like to have these older services be able to receive events from my new services, but am having a hard time figuring out how to setup both Mongo and Axon as event stores in the same application. Are there any examples showing how to setup this is configuration?

For my newer services we are running
Java 8, Spring-boot 2, axon 4, and Axon-Server

For the older services
Java 8, Spring-boot 1.5, axon 4 and Mongo

Thanks,
-Ben

I have the solution to my problem…

`

import com.mongodb.MongoClient
import org.axonframework.axonserver.connector.AxonServerConfiguration
import org.axonframework.axonserver.connector.AxonServerConnectionManager
import org.axonframework.axonserver.connector.event.axon.AxonServerEventStore
import org.axonframework.commandhandling.CommandBus
import org.axonframework.commandhandling.gateway.CommandGateway
import org.axonframework.commandhandling.gateway.DefaultCommandGateway
import org.axonframework.commandhandling.gateway.IntervalRetryScheduler
import org.axonframework.commandhandling.gateway.RetryScheduler
import org.axonframework.config.EventProcessingConfigurer
import org.axonframework.eventhandling.EventBus
import org.axonframework.eventhandling.tokenstore.TokenStore
import org.axonframework.eventsourcing.eventstore.EmbeddedEventStore
import org.axonframework.eventsourcing.eventstore.EventStorageEngine
import org.axonframework.eventsourcing.eventstore.EventStore
import org.axonframework.extensions.mongo.DefaultMongoTemplate
import org.axonframework.extensions.mongo.eventsourcing.eventstore.MongoEventStorageEngine
import org.axonframework.extensions.mongo.eventsourcing.tokenstore.MongoTokenStore
import org.axonframework.messaging.interceptors.BeanValidationInterceptor
import org.axonframework.serialization.Serializer
import org.axonframework.spring.config.AxonConfiguration
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Qualifier
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

import java.util.concurrent.Executors

@Configuration
@EnableAutoConfiguration
class AxonConfig {

def mongoDbName = ‘my-db’

@Bean(“mongoEventStore”)
EventStore mongoEventStore(EventStorageEngine eventStorageEngine) {
EventBus eventBus = EmbeddedEventStore.builder()
.storageEngine(eventStorageEngine)
.build()

eventBus.registerDispatchInterceptor(new BeanValidationInterceptor())

return eventBus
}

@Bean(“axonEventStore”)
EventStore eventStore(AxonServerConfiguration axonServerConfiguration,
AxonConfiguration configuration,
AxonServerConnectionManager axonServerConnectionManager,
Serializer snapshotSerializer,
@Qualifier(“eventSerializer”) Serializer eventSerializer) {
return AxonServerEventStore.builder()
.configuration(axonServerConfiguration)
.platformConnectionManager(axonServerConnectionManager)
.snapshotSerializer(snapshotSerializer)
.eventSerializer(eventSerializer)
.upcasterChain(configuration.upcasterChain())
.build()
}

@Bean
EventStorageEngine eventStorageEngine(DefaultMongoTemplate mongoTemplate) {
return MongoEventStorageEngine.builder()
.mongoTemplate(mongoTemplate).build()
}

@Bean
CommandGateway commandGateway(CommandBus commandBus, RetryScheduler retryScheduler) {

return DefaultCommandGateway.builder()
.commandBus(commandBus)
.retryScheduler(retryScheduler)
.dispatchInterceptors([new BeanValidationInterceptor()])
.build()
}

@Bean
RetryScheduler retryScheduler() {
return IntervalRetryScheduler.builder()
.retryExecutor(Executors.newScheduledThreadPool(2))
.retryInterval(100)
.maxRetryCount(10)
.build()
}

@Bean
DefaultMongoTemplate defaultMongoTemplate(MongoClient client) {
return DefaultMongoTemplate.builder()
.mongoDatabase(client, mongoDbName)
.build()
}

@Bean
TokenStore tokenStore(Serializer serializer, DefaultMongoTemplate mongoTemplate) {
return MongoTokenStore.builder()
.mongoTemplate(mongoTemplate)
.serializer(serializer)
.build()
}

@Autowired
void config(EventProcessingConfigurer configurer,
@Qualifier(“mongoEventStore”) EventStore mongoEventStore,
@Qualifier(“axonEventStore”) EventStore axonEventStore) {
configurer.registerSubscribingEventProcessor(“EnrollmentSummary”, { c -> return mongoEventStore })
configurer.registerSubscribingEventProcessor(“ToChannelServices”, { c -> return mongoEventStore })
configurer.registerTrackingEventProcessor(“ProgramService”, { c -> return axonEventStore })
}
}

`