Spring Cloud DataFlow:将有效负载作为List <map>

时间:2017-10-10 17:00:25

标签: spring-cloud-stream spring-cloud-dataflow

将Spring Cloud DataFlow 1.3.0.M2与Spring Cloud Stream Starters Celsius.M1配合使用。

我有两个处理器。首先产生一个应该由另一个消耗的List<Map>。这是简化的代码。

// Processor 1
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT)
// Note: had Object instead of List<> as the return, hoped perhaps using a
// specific type would help, but no difference.
public List<Map<String, Object>> process(final @Payload MyPojo payload) {
    final List<Map<String, Object>> results = worker.doWork(payload);
    LOG.debug("Returning " + results.size() + " objects");
    return results;
}

// Processor 2
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT)
public Object process(final @Payload List<Map<String, Object>> payload) {
    LOG.debug("Received " + payload.size() + " objects");
    final List<Map<String, Object>> results = worker.moreWork(payload);
    return results;
}

我正在使用SCDF shell在管道中部署这两个处理器:

<source> | otherProcessors | processor1 | processor2 | log

处理器1的调试消息表明它在列表中有2个对象。处理器2的调试消息说它接收到40个对象(每个映射有20个键=值对) - 看起来这两个映射被平铺成一个键=值对列表。

我为org.spring.integration启用了调试日志记录,并且消息似乎有一个映射格式列表(这是来自处理器2):

preSend on channel 'input', message: GenericMessage 
  [payload=[{"m1key1":"val1","m1key2":"val2",...,"m1key20":"val20"},
   {"m2key1":"val1","m2key2":"val2",...,"m2key20":"val20"}], headers={..}]

我希望处理器2接收处理器1生成的2张地图。我想知道这是否与泛型类型有关。有人能指出我的配置,以实现这一目标吗?

---- Artem的评论更新----

处理器1在application.properties文件中包含此内容:

spring.cloud.stream.bindings.output.content-type=application/json

我也试过像这样修改流定义,但它似乎没有什么区别:

<source> | otherProcessors | processor1 --outputType=application/json | processor2 --inputType=application/json | log

1 个答案:

答案 0 :(得分:1)

好的,你实际上偶然发现了一个错误:)

这已在2.0分支上修复,考虑到它是一个快照,暂时有点不稳定。

一旦我们在几天内发布,情况会更好。

团队正在讨论将修复程序移植到1.3行的前进道路。