我在这里关注春季kafka聚合示例:https://github.com/spring-cloud/spring-cloud-stream-samples/tree/master/kafka-streams-samples/kafka-streams-aggregate
我已经为该示例构建了一些变体,以构建更复杂的数据结构,而不仅仅是字符串附加,并且一切正常。
但是,我对使用侦听器(无论是云流,kafa流还是本机Kafka)响应新的聚合值感兴趣。我很难找到任何具体示例,甚至很难找到任何类似的示例,因此我希望能在正确的方向上有所作为。
我总是可以通过聚合方法手动将聚合写入另一个流
kStream.groupBy(...).aggregate(
...
(s, domainEvent, agg) -> {
...
// Update aggregate
...
secondaryStreamChannel().send(MessageBuilder.withPayload(agg).build());
},
...
);
但这似乎并不理想,因为它将使实际的聚合/快照流显得多余。现在,它还打破了聚合方法的隔离,并将其绑定到另一个流中。
我可以通过聚合键来通知其他处理程序,但是在下游处理程序执行和聚合完成之间存在竞争条件。
基本上,我希望有一个事件流,然后将其聚合,然后再调用一种方法,并至少提供并提供聚合键或键/聚合对。理想情况下,直到总更改可用时才调用该方法。是否可以使用现有的cloud-stream,kafka-stream或Kafka API?还有另一种方法(即...我是否试图将此用例与Kafka / streams过于紧密地联系在一起,而在这种情况下可能并不需要)?