Java 在运行时为消息驱动通道适配器将动态值传递给kafka使用者主题
要求是在运行时设置下面的topics属性,而不重新启动服务器。我们如何在这里实现它。 目前,我们正在从属性文件中读取值,但这里需要重新启动服务器以反映所做的更改 例如: 部署目录中的sample.properties topic.list=topic1,topic2 并且希望在未来不重新启动服务器的情况下使用topic3 注意:发现主题是最终变量 已尝试从部署目录外的文件系统路径读取keytopic.list,但没有成功 任何建议Java 在运行时为消息驱动通道适配器将动态值传递给kafka使用者主题,java,spring,apache-kafka,spring-integration,Java,Spring,Apache Kafka,Spring Integration,要求是在运行时设置下面的topics属性,而不重新启动服务器。我们如何在这里实现它。 目前,我们正在从属性文件中读取值,但这里需要重新启动服务器以反映所做的更改 例如: 部署目录中的sample.properties topic.list=topic1,topic2 并且希望在未来不重新启动服务器的情况下使用topic3 注意:发现主题是最终变量 已尝试从部署目录外的文件系统路径读取keytopic.list,但没有成功 任何建议 <int-kafka:message-driven-cha
<int-kafka:message-driven-channel-adapter
id="inAdapter"
channel="fromKafka"
connection-factory="connectionFactory"
key-decoder="kafkaKeyDecoder"
payload-decoder="kafkaDecoder"
topics="${topic.list}"
offset-manager="offsetManager"/>
您可以使用JavaDSL根据需要动态地为其他主题添加适配器
@Autowired
private IntegrationFlowContext flowContext;
public void addAnotherListenerForTopics(String... topics) {
IntegrationFlow flow =
IntegrationFlows.from(Kafka.messageDrivenChannelAdapter(consumerFactory(), topics))
.channel("fromKafka")
.get();
this.flowContext.registration(flow).register();
}
及
pom:
请注意,如果您正在使用代理分区分配,则新容器需要不同的组id,以避免撤消现有分配。您多久更改一次主题?在这种情况下,总是有一种方法可以动态创建通道适配器,虽然有点长,但它需要一些外部干预,也可能是一个api调用来触发操作。但这是一种要求,需要具有灵活性。这将非常好,如果您可以在这个方向上指导我。尝试理解这个概念,然后您可以轻松定制以适合您的用例,我可以帮助您进行后续操作。您可以更详细地解释此解决方案背后的理论,以便更好地理解吗?我不确定您在理解什么方面有困难;动态流注册将在中介绍。如果你还需要什么,请问一个新问题。请仔细研究一下-
bean.addAnotherListenerForTopics("added.new");
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-java-dsl</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>