Spring Axon-Kafka集成-使用自定义Kafka生产工厂
我使用的是GitHub()中的Kafka示例,它在连接到本地部署的Kafka集群时起作用。正如Axon所建议的,我试图通过公开一个KafkaPublisherbean并用ProducerFactory覆盖()来使用定制的kafkaProducerFactory。我的bean被创建了,但是我定制的kafkaProducerFactory的createProducer()从未被调用。事实上,Axon的DefaultProducerFactory仍在使用。有什么建议吗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
@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:我看到您已经解决了手头的问题,干得好!