如何从下一个Transformer模块中的Spring云数据流聚合器应用程序输出中提取Collection有效负载记录

问题描述 投票:0回答:1

我正在使用SCDF [Spring Cloud Data Flow],在我的流中我正在聚合有效载荷,在下一个变换器模块中,我希望得到接收有效载荷的大小[这是聚合器应用程序根据聚合特征输出的集合对象]

示例流:

stream create file_agr_trc_log  --definition "file --directory=/Users/keerthikanth/Documents/GroovySampleCodes/test  --filename-pattern='UNITINFO_DWH.txt' --mode=lines --outputType=plain/text   | aggregator  --release='size() == 1000'  --aggregation=\"#this.![new String(payload)]\" --group-timeout=4 --message-store-type=simple  --correlation='T(Thread).currentThread().id'   | log " --deploy

File /Users/keerthikanth/Documents/GroovySampleCodes/test/UNITINFO_DWH.txt包含

一个

C

d

F

G

H

一世

执行流后,使用聚合[--aggregation = \“#this。![new String(payload)] \”]的聚合器应用程序在日志应用程序中生成如下所示的集合

[A,B,C,D,E,F,G,H,I]

实际问题:

当我在聚合器应用程序之后应用新的自定义变换器应用程序以查找集合的大小和第一个记录时,当我尝试获取集合的第一个记录时,我得到错误的记录,e获取[作为第一个元素“,”作为第二个元素“A “作为第三要素。

因此,当从聚合器模块输出集合有效负载时,它会间接转换为字符串。

我试图在聚合器和spring.cloud.stream.bindings.input.content-中应用spring.cloud.stream.bindings.output.content-type ='application / x-java-object; type = java.util.List'在自定义变换器中类型='application / x-java-object; type = java.util.List'但仍面临同样的问题,因为它正在考虑所有元素作为集合的一部分,包括[,] charectors

另一个内容类型的流


stream create file_agr_trc_log  --definition "file --directory=/Users/keerthikanth/Documents/GroovySampleCodes/test  --filename-pattern='UNITINFO_DWH.txt' --mode=lines --outputType=plain/text   | aggregator --aggregation=\"#this.![new String(payload)]\"  --release='size() == 1000' --group-timeout=4 --message-store-type=simple  --correlation='T(Thread).currentThread().id' --spring.cloud.stream.bindings.output.content-type='application/x-java-object;type=java.util.List'  |  transCount --spring.cloud.stream.bindings.input.content-type='application/x-java-object;type=java.util.List'   | log " --deploy

客户变压器:

@EnableBinding(Processor.class)
public class processorApp {
  @ServiceActivator(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT)
  public String transformer(Collection payloadList)  {
     System.out.println("Size of Payload" + payloadList.size());
    System.out.println("Payload "+ payloadList.iterator().next().toString() );

     return payload;
}

任何人都可以建议我如何从定制变压器中的聚合器应用程序获取收到的集合有效负载的大小。即使在应用内容类型之后,它也没有考虑。即使使用默认聚合也与提供列表输出的情况相同,但接收变换器时将每个字符视为列表的元素

我的输出应该像First元素 - 该集合中元素的总大小

A - 8尺寸

spring-integration spring-cloud-stream spring-cloud-dataflow
1个回答
0
投票

如果你的聚合应用程序实际上根据你提供的指令产生了字符串,为什么你会期望它是一个集合:--aggregation=\"#this.![new String(payload)]\"

基本上你不需要为你的情况提供任何aggregation选项,因为它将默认为java.util.List。有关更多详细信息,请参阅聚合器的README

© www.soinside.com 2019 - 2024. All rights reserved.