/** * Registers a {@link org.axonframework.eventhandling.TrackingEventProcessor} with given {@code name} and {@code * source} within this Configurer. * * @param name a {@link String} specifying the name of the {@link org.axonframework.eventhandling.TrackingEventProcessor} * being registered * @param source a {@link Function} that builds a {@link StreamableMessageSource} * @return the current {@link EventProcessingConfigurer} instance, for fluent interfacing */ default EventProcessingConfigurer registerTrackingEventProcessor(String name, Function<Configuration, StreamableMessageSource<TrackedEventMessage<?>>> source) { return registerTrackingEventProcessor(name, source, c -> c.getComponent(TrackingEventProcessorConfiguration.class, TrackingEventProcessorConfiguration::forSingleThreadedProcessing)); }
/** * Registers a {@link org.axonframework.eventhandling.TrackingEventProcessor} with given {@code name} within this * Configurer. * * @param name a {@link String} specifying the name of the {@link org.axonframework.eventhandling.TrackingEventProcessor} * being registered * @return the current {@link EventProcessingConfigurer} instance, for fluent interfacing */ default EventProcessingConfigurer registerTrackingEventProcessor(String name) { return registerTrackingEventProcessor(name, c -> { EventBus eventBus = c.eventBus(); if (!(eventBus instanceof StreamableMessageSource)) { throw new AxonConfigurationException("Cannot create Tracking Event Processor with name '" + name + "'. " + "The available EventBus does not support tracking processors."); } //noinspection unchecked return (StreamableMessageSource) eventBus; }); }
@SuppressWarnings("unchecked") @Autowired public void configureEventHandling(EventProcessingConfigurer eventProcessingConfigurer, ApplicationContext applicationContext) { eventProcessorProperties.getProcessors().forEach((k, v) -> { Function<Configuration, SequencingPolicy<? super EventMessage<?>>> sequencingPolicy = resolveSequencingPolicy(applicationContext, v); eventProcessingConfigurer.registerSequencingPolicy(k, sequencingPolicy); if (v.getMode() == EventProcessorProperties.Mode.TRACKING) { TrackingEventProcessorConfiguration config = TrackingEventProcessorConfiguration .forParallelProcessing(v.getThreadCount()) .andBatchSize(v.getBatchSize()) .andInitialSegmentsCount(v.getInitialSegmentCount()); Function<Configuration, StreamableMessageSource<TrackedEventMessage<?>>> messageSource = resolveMessageSource(applicationContext, v); eventProcessingConfigurer.registerTrackingEventProcessor(k, messageSource, c -> config); } else { if (v.getSource() == null) { eventProcessingConfigurer.registerSubscribingEventProcessor(k); } else { eventProcessingConfigurer.registerSubscribingEventProcessor(k, c -> applicationContext .getBean(v.getSource(), SubscribableMessageSource.class)); } } }); }
/** * Registers a {@link org.axonframework.eventhandling.TrackingEventProcessor} with given {@code name} and {@code * source} within this Configurer. * * @param name a {@link String} specifying the name of the {@link org.axonframework.eventhandling.TrackingEventProcessor} * being registered * @param source a {@link Function} that builds a {@link StreamableMessageSource} * @return the current {@link EventProcessingConfigurer} instance, for fluent interfacing */ default EventProcessingConfigurer registerTrackingEventProcessor(String name, Function<Configuration, StreamableMessageSource<TrackedEventMessage<?>>> source) { return registerTrackingEventProcessor(name, source, c -> c.getComponent(TrackingEventProcessorConfiguration.class, TrackingEventProcessorConfiguration::forSingleThreadedProcessing)); }
/** * Registers a {@link org.axonframework.eventhandling.TrackingEventProcessor} with given {@code name} within this * Configurer. * * @param name a {@link String} specifying the name of the {@link org.axonframework.eventhandling.TrackingEventProcessor} * being registered * @return the current {@link EventProcessingConfigurer} instance, for fluent interfacing */ default EventProcessingConfigurer registerTrackingEventProcessor(String name) { return registerTrackingEventProcessor(name, c -> { EventBus eventBus = c.eventBus(); if (!(eventBus instanceof StreamableMessageSource)) { throw new AxonConfigurationException("Cannot create Tracking Event Processor with name '" + name + "'. " + "The available EventBus does not support tracking processors."); } //noinspection unchecked return (StreamableMessageSource) eventBus; }); }
@SuppressWarnings("unchecked") @Autowired public void configureEventHandling(EventProcessingConfigurer eventProcessingConfigurer, ApplicationContext applicationContext) { eventProcessorProperties.getProcessors().forEach((k, v) -> { Function<Configuration, SequencingPolicy<? super EventMessage<?>>> sequencingPolicy = resolveSequencingPolicy(applicationContext, v); eventProcessingConfigurer.registerSequencingPolicy(k, sequencingPolicy); if (v.getMode() == EventProcessorProperties.Mode.TRACKING) { TrackingEventProcessorConfiguration config = TrackingEventProcessorConfiguration .forParallelProcessing(v.getThreadCount()) .andBatchSize(v.getBatchSize()) .andInitialSegmentsCount(v.getInitialSegmentCount()); Function<Configuration, StreamableMessageSource<TrackedEventMessage<?>>> messageSource = resolveMessageSource(applicationContext, v); eventProcessingConfigurer.registerTrackingEventProcessor(k, messageSource, c -> config); } else { if (v.getSource() == null) { eventProcessingConfigurer.registerSubscribingEventProcessor(k); } else { eventProcessingConfigurer.registerSubscribingEventProcessor(k, c -> applicationContext .getBean(v.getSource(), SubscribableMessageSource.class)); } } }); }