【发布时间】:2021-05-25 07:44:31
【问题描述】:
我正在寻找一个使用 spring cloud stream kafka binder(没有 Kafka Streams)创建函数式处理器的示例,该处理器可以消耗来自一个主题的一批 n 条消息并将 m 条消息发布到另一个主题(m
public Function<List<IncomingEvent>, List<Message<OutgoingEvent>>> aggregate() {
return ((batch) -> {
Map<Key, List<IncomingEvent>> resultsMap = batch.stream()
.collect(Collectors.groupingBy(result -> IncomingEvent::key));
List<Message<OutgoingEvent>> aggregationResults = new ArrayList<>();
for (Map.Entry<Key,List<IncomingEvent>> resultGroup : resultsMap.entrySet()) {
OutgoingEvent outgoingEvent = this.getOutgoingEvent(resultGroup.getKey(), resultGroup.getValue());
aggregationResults.add(
MessageBuilder.withPayload(outgoingEvent)
.setHeader(KafkaHeaders.MESSAGE_KEY, outgoingEvent.getKey())
.build()
);
}
return aggregationResults;
});
}
但是,这会产生一个带有消息数组的单个事件。我尝试将函数的返回类型从 List
【问题讨论】:
标签: apache-kafka spring-cloud-stream spring-cloud-stream-binder-kafka