我已经按照 https://dataflow.spring.io/docs/stream-developer-guides/streams/standalone-stream-kafka/
开发3个应用。 1个源(Usage-Detail-Sender),1个处理器(Usage-Cost-Processor)和1个接收器(Usage-Cost-Logger)。 Java代码如该教程中所述。
我使用本指南https://dataflow.spring.io/docs/installation/local/docker-customize/启动Spring Cloud Data Flow(SCDF)服务器。
我在SCDF服务器中注册了所有应用程序。然后,我创建了一个流并将其部署。该代码工作正常。键入
时,我的kafka zookeeper中显示的主题kafka-topics --list --zookeeper localhost:2181
在zookeeper docker容器中显示
usage-stream.usage-processor
usage-stream.usage-sender
在我的application.3个应用程序的属性如下,
使用详细发送者
spring.cloud.stream.bindings.output.destination=usage-detail
# Kafka Binder Properties #
spring.cloud.stream.kafka.binder.brokers=kafka-0,kafka-1
使用成本处理器
spring.cloud.stream.bindings.input.destination=usage-detail
spring.cloud.stream.bindings.output.destination=usage-cost
# Kafka Binder Properties #
spring.cloud.stream.kafka.binder.brokers=kafka-0,kafka-1
使用成本记录器
spring.cloud.stream.bindings.input.destination=usage-cost
# Kafka Binder Properties #
spring.cloud.stream.kafka.binder.brokers=kafka-0,kafka-1
问题1 :
为什么主题为何显示usage-stream.usage-processor
和usage-stream.usage-sender
而不是用法细节和用法成本?我怀疑这与在SCDF中以流形式启动这3个应用有关吗?
问题2 :
如何将动态主题发送给Kafka?根据教程代码,他们似乎使用org.springframework.cloud.stream.messaging.Source
将消息发送到kafka。但是,这仅适用于单个主题。
我尝试按照其他线程中的建议使用org.springframework.cloud.stream.binding.BinderAwareChannelResolver
发送动态主题。
例如
private BinderAwareChannelResolver resolver;
Message<String> message = MessageBuilder
.withPayload(this.data)
.build();
boolean isSent = this.resolver.resolveDestination(this.topic)
.send(message);
但是,当我以SCDF作为流启动应用程序时,我的处理器和接收器应用程序无法收听和检测这些主题。
我该如何解决?谢谢