如何在Spring Integration中为出站gateway指定服务实现?如果出站网关用于双向通信,通常用于提供与外部系统的集成,服务激活器用于本地服务调用,那么如何为自定义传输/外部系统实现出站网关? Gateway namespace允许为入站网关设置服务接口,但是出站网关的服务实现呢?
<int:gateway id="cafeService"
service-interface="org.cafeteria.Cafe"
default-request-channel="requestChannel"
default-reply-channel="replyChannel"/>
答案 0 :(得分:3)
最简单的机制是将服务接口实现为POJO并从
调用它<service-activator input-channel="..." output-channel="..."
ref="myPojo" method="process" />
,其中
public class MyPoJo {
public Bar process(Foo foo) {
...
}
}
如果您想更正式地执行此操作,可以延长AbstractReplyProducingMessageHandler
。并将其包装在消费者端点中,但大多数情况下POJO路由是首选,因为那时您将没有框架依赖性。
修改强>:
如果你使用Spring Tool Suite(基于eclipse),有一个初学者项目可以帮助你使用模板构建一个完整的网关;它包括名称空间解析器和所有内容(New | Spring | Spring Project | Integration ...
)的入门类。该模板在此处托管。它们有点过时了(例如需要一个SI更新,我们不再使用docbook了 - 至少在master上 - 我们使用asciidoc),但它应该需要很长的路要走。您还可以查看标准解析器以获取命名空间的帮助。
如果您认为您的网关可能具有广泛的吸引力,请考虑将其贡献给扩展程序。
<强> EDIT2 强>:
从你的评论......
据我所知,出站网关用于提供与外部系统的集成,服务激活器用于本地服务呼叫
通常就是这种情况,但没有什么可以阻止你通过<service-activator/>
调用外部服务 - 这是个人偏好的问题,没有真正的理由去创建正式的适配器,除非你希望将其发布以供您的组织使用和/或以更正式的方式将其贡献给社区。 p>