【问题标题】:custom spring integration outbound gateway implementation自定义spring集成出站网关实现
【发布时间】:2015-05-30 19:41:59
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    最简单的机制是将您的服务接口实现为 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

    根据您的评论...

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

    通常是这样,但是没有什么可以阻止您通过 &lt;service-activator/&gt; 调用外部服务 - 这是个人喜好问题,没有真正的理由创建正式的适配器,除非您希望发布它在您的组织内使用和/或以更正式的方式将其贡献给社区。​​p>

    【讨论】:

    • 我想更正式地这样做,因为据我了解,出站网关用于提供与外部系统的集成,服务激活器用于本地服务调用。那是对的吗?那么创建出站网关没有命名空间支持吗?我必须使用服务激活器或通过扩展 AbstractReplyProducingMessageHandler 来实现我自己的自定义网关?
    猜你喜欢
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多