在Kafka Streams'处理器API,我可以将处理器上下文从init()
传递给其他函数,并使用process()
中的状态存储获取上下文吗?
public void init(ProcessorContext context) {
this.context = context;
String resourceName = "config.properties";
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Properties props = new Properties();
try(InputStream resourceStream = loader.getResourceAsStream(resourceName)) {
props.load(resourceStream);
}
catch(IOException e){
e.printStackTrace();
}
dataSplitter.timerMessageSource(props, context);//can I pass context like this?
this.context.schedule(1000);
// retrieve the key-value store named "patient"
kvStore = (KeyValueStore<String, PatientDataSummary>) this.context.getStateStore("patient");
//want to get the value of statestore filled by the called function timerMessageSource(), as the data to be put in statestore is getting generated in timerMessageSource()
//is there any way I can get that by using context or so
}
答案 0 :(得分:1)
ProcessorContext
的使用有些限制,您不能在任意时间调用每个方法。因此,它取决于您如何使用它 - 通常,您可以根据需要传递它(在处理器的整个实时时间内它始终是相同的对象)。
如果我正确理解了您的问题,请注册标点符号并在标点符号回调中使用dataSplitter
并想要修改商店。这绝对是可能的 - 您可以将商店放入类似于上下文的类成员中,也可以使用上下文对象将商店置于标点回调中。