自定义spring集成出站网关实现

时间:2015-03-26 16:55:13

标签: java spring integration spring-integration integration-patterns

如何在Spring Integration中为出站gateway指定服务实现?如果出站网关用于双向通信,通常用于提供与外部系统的集成,服务激活器用于本地服务调用,那么如何为自定义传输/外部系统实现出站网关? Gateway namespace允许为入站网关设置服务接口,但是出站网关的服务实现呢?

<int:gateway id="cafeService"
         service-interface="org.cafeteria.Cafe"
         default-request-channel="requestChannel"
         default-reply-channel="replyChannel"/>

1 个答案:

答案 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/>调用外部服务 - 这是个人偏好的问题,没有真正的理由去创建正式的适配器,除非你希望将其发布以供您的组织使用和/或以更正式的方式将其贡献给社区。