Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Axon-Kafka集成-使用自定义Kafka生产工厂_Spring_Apache Kafka_Axon - Fatal编程技术网

Spring Axon-Kafka集成-使用自定义Kafka生产工厂

Spring Axon-Kafka集成-使用自定义Kafka生产工厂,spring,apache-kafka,axon,Spring,Apache Kafka,Axon,我使用的是GitHub()中的Kafka示例,它在连接到本地部署的Kafka集群时起作用。正如Axon所建议的,我试图通过公开一个KafkaPublisherbean并用ProducerFactory覆盖()来使用定制的kafkaProducerFactory。我的bean被创建了,但是我定制的kafkaProducerFactory的createProducer()从未被调用。事实上,Axon的DefaultProducerFactory仍在使用。有什么建议吗 @Bean KafkaPubli

我使用的是GitHub()中的Kafka示例,它在连接到本地部署的Kafka集群时起作用。正如Axon所建议的,我试图通过公开一个KafkaPublisherbean并用ProducerFactory覆盖()来使用定制的kafkaProducerFactory。我的bean被创建了,但是我定制的kafkaProducerFactory的createProducer()从未被调用。事实上,Axon的DefaultProducerFactory仍在使用。有什么建议吗

@Bean
KafkaPublisher<byte[], byte[]> kafkaPublisher(ProducerFactory factory) {
    KafkaPublisherConfiguration configuration = KafkaPublisherConfiguration.<String, byte[]>builder()
        .withMessageSource(new SimpleEventBus())
        .withProducerFactory(new org.axonframework.kafka.eventhandling.producer.ProducerFactory<String, byte[]>() {
            @Override
            public Producer<String, byte[]> createProducer() {
                return factory.createProducer();
            }

            @Override
            public void shutDown() {
            }
        })
        .withTopic(topic)
        .build();
    KafkaPublisher<byte[], byte[]> publisher = new KafkaPublisher<>(configuration);
    publisher.start();
    return publisher;
}
@Bean
卡夫卡普利舍尔卡夫卡普利舍尔(生产工厂){
kafkapulisherconfiguration=kafkapulisherconfiguration.builder()
.withMessageSource(新的SimpleEventBus())
.withProducerFactory(新org.axonframework.kafka.eventhandling.producer.ProducerFactory(){
@凌驾
公共制作人createProducer(){
返回factory.createProducer();
}
@凌驾
公共空间关闭(){
}
})
.withTopic(主题)
.build();
KafkaPublisher publisher=新的KafkaPublisher(配置);
publisher.start();
返回出版商;
}

我可以通过保留KafkaPublisher来解决我的问题,但我需要公开一个EventBusbean(我在Sender.java中获得了资格),并将发布者连接到它。我还需要暴露我自己的轴突ProducerFactory,它包裹着我自己的卡夫卡ProducerFactory。我的最终配置如下:

@Configuration
@AutoConfigureBefore(KafkaAutoConfiguration.class)
class AxonConfig {

    @Value("${axon.kafka.default-topic}")
    private String topic;

    @Bean
    public org.axonframework.kafka.eventhandling.producer.ProducerFactory<byte[], byte[]> producerFactory(ProducerFactory factory) {
        return new org.axonframework.kafka.eventhandling.producer.ProducerFactory<byte[], byte[]>() {
            @Override
            public Producer<byte[], byte[]> createProducer() {
                return factory.createProducer();
            }

            @Override
            public void shutDown() {
            }
        };
    }

    @Bean("event-bus")
    EventBus eventBus() {
        return new SimpleEventBus();
    }

    @Bean
    KafkaPublisher<byte[], byte[]> kafkaPublisher(org.axonframework.kafka.eventhandling.producer.ProducerFactory factory, EventBus eventBus) {
        KafkaPublisherConfiguration configuration = KafkaPublisherConfiguration.<String, byte[]>builder()
            .withMessageSource(eventBus)
            .withProducerFactory(factory)
            .withTopic(topic)
            .build();
        MyKafkaPublisher<byte[], byte[]> publisher = new MyKafkaPublisher<>(configuration);
        eventBus.subscribe((events) -> publisher.sendEvents(events));
        publisher.start();
        return publisher;
    }
}
@配置
@AutoConfigureBefore(KafkaAutoConfiguration.class)
类轴心图{
@值(${axon.kafka.default topic}”)
私有字符串主题;
@豆子
public org.axonframework.kafka.eventhandling.producer.ProducerFactory ProducerFactory(ProducerFactory工厂){
返回新的org.axonframework.kafka.eventhandling.producer.ProducerFactory(){
@凌驾
公共制作人createProducer(){
返回factory.createProducer();
}
@凌驾
公共空间关闭(){
}
};
}
@Bean(“事件总线”)
EventBus事件总线(){
返回新的SimpleEventBus();
}
@豆子
KafkaPublisher KafkaPublisher(org.axonframework.kafka.eventhandling.producer.producer工厂,EventBus EventBus){
kafkapulisherconfiguration=kafkapulisherconfiguration.builder()
.withMessageSource(事件总线)
.与生产商工厂(工厂)
.withTopic(主题)
.build();
MykafkapPublisher publisher=新的MykafkapPublisher(配置);
订阅((事件)->publisher.sendEvents(事件));
publisher.start();
返回出版商;
}
}

Hi@blackcompe,您参考的是哪些文档?Axon的卡夫卡章节,还是与Marinko样本相关的文档?添加,这部分中的Kafka扩展和Axon文档使用了一个
DefaultProducerFactory
,而您正在这段代码中创建一个匿名类。@Steven:我看到您已经解决了手头的问题,干得好!