Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/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
Java 在运行时为消息驱动通道适配器将动态值传递给kafka使用者主题_Java_Spring_Apache Kafka_Spring Integration - Fatal编程技术网

Java 在运行时为消息驱动通道适配器将动态值传递给kafka使用者主题

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

要求是在运行时设置下面的topics属性,而不重新启动服务器。我们如何在这里实现它。 目前,我们正在从属性文件中读取值,但这里需要重新启动服务器以反映所做的更改

例如: 部署目录中的sample.properties

topic.list=topic1,topic2

并且希望在未来不重新启动服务器的情况下使用topic3

注意:发现主题是最终变量

已尝试从部署目录外的文件系统路径读取keytopic.list,但没有成功

任何建议

<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>