我有一个系统,我需要与需要放在一个文件夹中的文件集成,并将该文件复制到"成功"文件夹或"错误"文件夹取决于是否正确处理。我目前在DSL中定义了一个流程,如此
return f -> f.channel("orders.in")
.transform(Transformers.marshaller(marshaller(), resultTransformer(), true))
.handle(Files.outboundAdapter(properties.getInputDirectory()));
网关定义为
@Gateway(requestChannel="orders.in")
public void submitOrder(Order order);
我想要的是一个响应而不是public String submitOrder(Order order)
,其中返回的String如果成功则是一个订单号,如果失败则返回null。我现在已经玩了几个小时了,如果没有引入AMQ或其他什么但我觉得它应该是可能的,我很难知道如何实现这个目标。我甚至不知道这是否是我最终会使用它的方式,因为我可能会稍后处理响应异步并通过其他方式通知用户,但我很顽固并希望尝试让它工作首先如果可能的话。任何帮助表示赞赏。
答案 0 :(得分:1)
您将第二个使用者订阅到变换器和文件适配器之间的通道...
.transform(...)
.publishSubscribeChannel(s -> s
.subscribe(f -> f.handle(...))
.subscribe(f -> f ...)); // produce a reply here
在成功写入文件后将调用第二个订阅者,第二个订阅者生成的任何内容将作为方法结果返回到@Gateway
。
@Gateway(requestChannel="orders.in")
public String submitOrder(Order order);
默认情况下,将向网关调用方抛出失败(异常)。要在失败后获得null,您必须处理网关错误通道上的错误,并且没有来自该流的返回值。