0

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

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

1 回答 1

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),但它应该会让你走很长一段路。您还可以查看标准解析器以获取有关命名空间的帮助。

如果您认为您的网关可能具有广泛的吸引力,请考虑将其贡献给扩展。

编辑2

从你的评论...

据我了解,出站网关用于提供与外部系统的集成,服务激活器用于本地服务调用

通常是这种情况,但是没有什么可以阻止您通过 a 调用外部服务<service-activator/>- 这是个人喜好问题,没有真正的理由创建正式的适配器,除非您希望发布它以供您的组织内部使用并且/ 或以更正式的方式将其贡献给社区。

于 2015-03-26T18:27:11.587 回答