Spring Integration:处理非MessageProducer处理程序

时间:2015-01-23 01:27:43

标签: java spring spring-integration

我正在使用Spring Integration 4.我希望为各种集成定义一个合同,其中集成需要实现通用接口,如:

public interface Integration {
   Object execute(Map<String, Object> inputs);
}

然后定义集成,定义网关:

<int:gateway service-interface="com.whatever.Integration" ... >

我已经开始工作了,但我很难理解如何处理execute方法的返回值。我构建的第一个集成发送了一封电子邮件,因此并没有真正的返回值,即工作流的最后一个元素是非MessageProducer邮件发件人:<int-mail:outbound-channel-adapter ... >

如果我将execute方法的返回类型更改为void,则集成运行正常,但只要我将其更改为Object,集成就会运行,但永远不会返回。我认为这是因为它在回复频道上等待某些事情。

对于这些类型的非结果生成集成,有没有办法强制返回true值或什么?我正在考虑尝试类似<int:transformer expression="true">之类的内容,但我无法在<int-mail:outbound-channel-adapter>之后将其放入我的链中,因为后者不会产生值,因此无法在MessageProducer之前链中的任何东西。

因此,我对如何处理非{{1}}元素感到有些困惑。非常感谢任何帮助。

P.S。如果有人对上面提出的集成架构有任何反馈意见,请随时在评论中加入。

1 个答案:

答案 0 :(得分:0)

TBH您的客户应该知道是否有回复。在这种情况下,添加第二个返回void的方法。

或者向gw添加reply-timeout = 0,你将返回null。

后者的问题是,您无法判断回复生产者是否超时使用requires-reply = false,或者最终消费者永远不会返回回复。