gpt4 book ai didi

java - 在不受 Spring 管理的类中使用 KafkaListener

转载 作者:行者123 更新时间:2023-12-02 10:36:06 38 4
gpt4 key购买 nike

在我的项目中,我有很多 spring 管理的组件,它们做同样的事情。我想创建一个通用的 Util 类,它可以为我的所有组件执行所有通用操作。由于这个 Util 类需要访问环境变量和 beans,它的实例化如下:

// Util class:
public class FooUtil {
public FooUtil(Environment env) {
env.getProperty("FOO_TOPIC", "foo")
}
}

// Example configuration for one of my components:
@Configuration
public class ComponentConfig {
@Bean
FooUtil fooUtil(Environment env) {
return new FooUtil(env);
}
}

这允许 FooUtil 访问所有环境变量和 bean,而无需本身成为组件。

现在,这个Util类还需要监听kafka主题。当前每个组件都有一个如下设置的监听器:

@KafkaListener(topics = "${FOO"_TOPIC:foo2}", containerFactory = "kafkaListenerContainerFactory")
private void fooListener(ConsumerRecord<String, Foo> rec) {
// Stuff...
}

我想将这个 kafka 监听器移动到 FooUtil 中。我该如何做到这一点? 明确地说,我希望 FooUtil 在被组件实例化和初始化后立即开始监听。

最佳答案

由于 FooUtil 不是由 Spring 管理,因此您无法使用 @KafkaListener 注释。如果 FooUtil 是 Spring 管理的 bean,它将被 Spring 拾取,并且监听器注释将导致 Spring 连接监听器。我相信所有这些都是由 Spring 在 KafkaListenerAnnotationBeanPostProcessor 中完成的。

FooUtil 必须是非托管 bean 吗?我可能会遗漏一些细节,但从问题中我看不出为什么它不可能。如果您需要为每个使用它的 bean 提供不同的实例,您可以在 FooUtil 上使用 @Scope("prototype")

关于java - 在不受 Spring 管理的类中使用 KafkaListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53281075/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com