弹簧集成 - 多个网关

时间:2017-06-15 15:43:51

标签: spring spring-integration gateway

在我的项目中,我将有两个具有相同输入参数但响应不同的入站网关。每个网关都在不同的xml中声明。问题是当我调用gateway1时,它转到xml2而不是xml1。 我们该怎么办呢。在同一个界面中有两个网关

public interface MessageGateway {
    @Gateway(requestChannel="requestChannel1")
    @Payload("#args")
    public Response1 invoke(Bean bean) throws Exception;

    @Gateway(requestChannel="requestChannel2")
    @Payload("#args")
    public List<Response2> invoke2(Bean bean) throws Exception;

}

在xml1中

<int:gateway id="invoke" default-request-channel="requestChannel1" default-reply-channel="finalResult"
                 service-interface="<class name>" error-channel="errorChannel" default-reply-timeout="6000"/>
    <int:channel id="errorChannel"/>

在xml2中

<int:gateway id="invoke1" default-request-channel="requestChannel2" default-reply-channel="finalResult"
                     service-interface="<class name>" error-channel="errorChannel" default-reply-timeout="6000"/>
        <int:channel id="errorChannel"/>

我从另一个系统调用网关。所以我自动连接网关接口并调用方法。

根据Gary的评论添加自动装配

@Autowired
private MessageGateway gateway;
//calling
gateway.invoke(bean);

2 个答案:

答案 0 :(得分:1)

看。对于同一个界面,您不需要两个<gateway>定义。

如果您担心requestChannel,可以在@Gateway的{​​{1}}注释或<method>子元素上使用该属性。

如果有两个<gateway> s,看起来第二个获胜,我们只有配置的那部分代理。

答案 1 :(得分:0)

解决方案是声明方法子元素。另请参阅loadBrokerGateway:http://docs.spring.io/spring-integration/docs/2.0.0.RC1/reference/html/gateway.html

所以XML1

<int:gateway id="invoke" default-request-channel="requestChannel1" default-reply-channel="finalResult" service-interface="<class name>" error-channel="errorChannel" default-reply-timeout="6000">
    <int:method name="invoke" request-channel="requestChannel1" />
</int:gateway>
<int:channel id="errorChannel"/>

和XML2

<int:gateway id="invoke1" default-request-channel="requestChannel2" default-reply-channel="finalResult" service-interface="<class name>" error-channel="errorChannel" default-reply-timeout="6000">
    <int:method name="invoke" request-channel="requestChannel2" />
</int:gateway>
<int:channel id="errorChannel"/>