26.Axon框架-事件(四)

33 阅读2分钟

事件(四)

1.什么是SubscribingEventProcessor

1768109161060.png

1768109179291.png

2.优缺点

1768109261987.png

3.扩展

可以结合Axon的AMQP或Kafka扩展时,其部分局限性会得到缓解,使其成为可行方案

4.配置方式(一)

介绍

首先,若要指定新的EventProcessor器默认使用SubscribingEventProcessor,可调用usingSubscribingEventProcessors方法

原生API
public class AxonConfig {
    // 省略其他配置方法...
    public void configureProcessorDefault(EventProcessingConfigurer processingConfigurer) {
        processingConfigurer.usingSubscribingEventProcessors();
    }
}
SpringBoot
@Configuration
public class AxonConfig {
    // 省略其他配置方法...
    @Bean
    public ConfigurerModule processorDefaultConfigurerModule() {
        return configurer -> configurer.eventProcessing(EventProcessingConfigurer::usingSubscribingEventProcessors);
    }
}

5.配置方式(二)

介绍

若要将特定的事件处理器配置为订阅式实例,需使用registerSubscribingEventProcessor方法

原生API
public class AxonConfig {
    // 省略其他配置方法...
    public void configureSubscribingProcessors(EventProcessingConfigurer processingConfigurer) {
        // 配置一个订阅式处理器...
        processingConfigurer.registerSubscribingEventProcessor("my-processor")
                            // ...并指定特定的 SubscribableMessageSource...
                            .registerSubscribingEventProcessor("my-processor", conf -> /* 创建并返回 SubscribableMessageSource */);
    }
}
SpringBoot
@Configuration
public class AxonConfig {
    // 省略其他配置方法...
    @Bean
    public ConfigurerModule subscribingProcessorsConfigurerModule() {
        return configurer -> configurer.eventProcessing(
                // 配置一个订阅式处理器...
                processingConfigurer -> processingConfigurer.registerSubscribingEventProcessor("my-processor")
                                                            // ...并指定特定的 SubscribableMessageSource...
                                                            .registerSubscribingEventProcessor(
                                                                    "my-processor",
                                                                    conf -> /* 创建并返回 SubscribableMessageSource */
                                                            )
        );
    }
}
配置文件

属性文件可用于配置EventProcessor的部分字段,但Java配置方式提供了更大的自由度:

axon.eventhandling.processors.my-processor.mode=subscribing
axon.eventhandling.processors.my-processor.source=eventBus

若事件处理器的名称包含小数点,需使用map语法:

axon.eventhandling.processors[my.processor].mode=subscribing
axon.eventhandling.processors[my.processor].source=eventBus

6.错误模式

当ErrorHandler重抛异常时,SubscribingEventProcessor会将异常冒泡传递给事件发布组件。这种机制允许发布组件根据异常类型采取相应的处理策略(如终止事务、重试等)

7.持久化流

介绍

1768109756538.png

三大核心能力

1768109819440.png

工作机制

1768109857807.png

排序策略

1768110332254.png

配置

介绍

1768110172653.png

注意:

  1. 使用相同名称会覆盖现有流连接
  2. filter为null时接收所有事件
原生API
public class AxonConfig {
    // 省略其他配置方法...
    public void configureSubscribingProcessors(EventProcessingConfigurer processingConfigurer) {
        String streamName = "my-persistent-stream-name";
        int segmentCount = 4;
        // 对于按聚合顺序的策略(sequential per aggregate policy),不需要设置以下参数。
        // 其他策略请参考 PersistentStreamSequencingPolicyProvider 的 JavaDoc。
        List<String> sequencingPolicyParameters = new ArrayList<>();
        // 可选参数,用于在 Axon Server 端过滤事件。
        String filter = null;
        int batchsize = 1024;

        PersistentStreamProperties persistentStreamProperties = new PersistentStreamProperties(
                streamName,
                segmentCount,
                PersistentStreamSequencingPolicyProvider.SEQUENTIAL_PER_AGGREGATE_POLICY,
                sequencingPolicyParameters,
                PersistentStreamProperties.HEAD_POSITION,
                filter
        );

        processingConfigurer.registerSubscribingEventProcessor(
                "my-processor",
                config -> new PersistentStreamMessageSource(
                        streamName,
                        config,
                        persistentStreamProperties,
                        Executors.newScheduledThreadPool(4),
                        batchsize
                )
        );
    }
}
@Configuration
public class AxonConfig {
    // 省略其他配置方法...
    @Bean
    public ConfigurerModule subscribingProcessorsConfigurerModule() {
        String streamName = "my-persistent-stream-name";
        int segmentCount = 4;
        // 对于按聚合顺序的策略,不需要设置以下参数。
        // 其他策略请参考 PersistentStreamSequencingPolicyProvider 的 JavaDoc。
        List<String> sequencingPolicyParameters = new ArrayList<>();
        // 可选参数,用于在 Axon Server 端过滤事件。
        String filter = null;
        int batchsize = 1024;

        PersistentStreamProperties persistentStreamProperties = new PersistentStreamProperties(
                streamName,
                segmentCount,
                PersistentStreamSequencingPolicyProvider.SEQUENTIAL_PER_AGGREGATE_POLICY,
                sequencingPolicyParameters,
                PersistentStreamProperties.HEAD_POSITION,
                filter
        );

        return configurer -> configurer.eventProcessing(
                // 配置订阅式处理器...
                processingConfigurer -> processingConfigurer.registerSubscribingEventProcessor(
                        "my-processor",
                        config -> new PersistentStreamMessageSource(
                                streamName,
                                config,
                                persistentStreamProperties,
                                Executors.newScheduledThreadPool(4),
                                batchsize
                        )
                )
        );
    }
}
配置文件

1768110524955.png

8.总结

1768110561575.png