将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
答案 0 :(得分:1)
好的,你实际上偶然发现了一个错误:)
这已在2.0分支上修复,考虑到它是一个快照,暂时有点不稳定。
一旦我们在几天内发布,情况会更好。
团队正在讨论将修复程序移植到1.3行的前进道路。