想象一下这样的情况:我有一个主题,状态很多,每个状态在其他日志中都具有相同的键。这些状态的顺序是已知的,并且始终相同,例如:创建,付款,交付等。
因此,如果order相同且在profileEvent.parcelEvent下面的代码中已知(并且创建状态为第一),则必须始终存在。但这没有发生,我在其他if(已付费)或if(已交付)部分中得到了空指针异常。这证明创建的部分不会首先执行。
问题是为什么会这样,假设消息顺序正确?
.groupByKey()
.aggregate(
CustomerProfileEvent::new,
(key, value, profileEvent) -> {
if (created) {
Parcel parcel = value.getParcel();
return CustomerProfileEvent.newBuilder()
.setEventTimestamp(value.getHeader().getTimestamp())
.setParcelEvent(CustomerProfileParcelEvent.newBuilder()
.setEventName(parcelCreated)
.setParcelCode(parcel.getParcelCode().toString())
.build())
.build();
}else if(paid){
do some action on profileEvent.parcelEvent
}else if(deliverd){
do some action on profileEvent.parcelEvent
}
return profileEvent;
},
Materialized.as(Stores.persistentKeyValueStore(applicationConfig.getParcelEventAggregationTopicName()))
.withKeySerde((Serde) Serdes.String())
.withValueSerde(avroSerdeHelper.createCustomerProfileEventSerde())
.withCachingDisabled()
);