我正在尝试创建kstreams bean并将其自动连接到我的服务中。但是,即使我得到相同的对象,stream.print()也不给出任何值,但是在同一个bean内进行打印仍然有效。我想我没有通过配置获得相同的StreamBuilder。
配置文件
@Configuration
@EnableKafka
@EnableKafkaStreams
public class KafkaStreamsConfiguration {
@Autowired private KafkaProperties kafkaProperties;
@Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME)
public StreamsConfig kStreamsConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(StreamsConfig.APPLICATION_ID_CONFIG, "test-streams2");
props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaProperties.getBootstrapServers());
props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass());
props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass());
props.put(JsonDeserializer.DEFAULT_KEY_TYPE, String.class);
props.put(JsonDeserializer.DEFAULT_VALUE_TYPE, String.class);
return new StreamsConfig(props);
}
@Bean
public KStream<String, String> kStreamJson(StreamsBuilder builder) {
KStream<String, String> stream = builder.stream("topictest", Consumed.with(Serdes.String(), Serdes.String()));
//stream.print();
return stream;
}
}
服务
这里的打印功能不会引发任何错误,也不会打印任何值
@Service
public class KStreamsService {
@Autowired
KStream<String, String> kStream;
void process() {
System.out.println("Hai");
kStream.print();
}
}
主要
@SpringBootApplication
public class KStreamsApplication {
@Autowired
KStreamsService kStreamsService;
public static void main(String[] args) {
SpringApplication.run(KStreamsApplication.class, args);
}
private void run() {
kStreamsService.process();
}
}
我在这里做错什么了吗?
答案 0 :(得分:0)
目前尚不清楚您在应用程序中在何处调用该run()
方法。
但是,在服务中调用stream.print()
为时已晚,因为到那时流已经启动了。
这对我有用...
@SpringBootApplication
public class KStreamsApplication {
@Autowired
KStreamsService kStreamsService;
public static void main(String[] args) {
SpringApplication.run(KStreamsApplication.class, args);
}
@Bean
public ApplicationRunner runner(StreamsBuilderFactoryBean fb) {
fb.setAutoStartup(false);
return args -> {
run();
fb.start();
};
}
private void run() {
kStreamsService.process();
}
}
和
[KSTREAM-SOURCE-0000000000]: null, foo