我想使用Spring Cloud Stream API汇总主题中的事件。 因此,我使用KStream作为输入。
KStream<Object, LoggerCreatedMessage>
现在,我想使用聚合器将新对象存储在KeyValue存储中,因此我使用以下代码:
input
.map((key, value) -> {
return new KeyValue<>(value.logger_id,value);
})
/*.groupBy(
(s, loggerEvent) -> loggerEvent.logger_id,
Serialized.with(null, loggerEventSerde))*/
.groupByKey()
.aggregate(
String::new,
(s, loggerEvent, vr) -> {
return vr;
},
Materialized.<String, String, KeyValueStore<Bytes, byte[]>>as(STORE_NAME).withKeySerde(Serdes.String()).
withValueSerde(Serdes.String())
);
为什么我只能使用字符串作为初始化程序,否则无法使用任何对象?
我想使用LoggerDomain :: new,而不是String :: new,但我只收到以下错误消息:
方法参考中的错误返回类型:无法将LoggerDomain转换为VR
我想念什么吗?
答案 0 :(得分:0)
您通过<key,value>
将<String, String>
定义为Materialized.<String, String, KeyValueStore<Bytes, byte[]>>
-如果您的值类型应为LoggerDomain
,则应为Materialized.<KeyType, LoggerDomain, KeyValueStore<Bytes, byte[]>>()
。
请注意,在这种情况下,您还需要为Serde
提供LoggerDomain
的自定义Materialized
。