2017-06-15 99 views
1

在我的项目中,我将有两个入口网关具有相同的输入参数,但不同的响应。每个网关都在不同的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"/> 

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

按照加里的评论添加自动装配

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

表现你对两个网关自动装配。 –

+0

将方法放在不同的接口中可能会更好,以避免混淆。通过这种配置,两个网关都有两种方法。 –

+0

自动装配应该失败 - 你有两个bean'invoke'和'invoke1'。春天不知道如何选择自动布线。你或者只需要一个'',或者你应该把这些方法放在不同的接口上。 –

回答

1

看。您不需要为同一接口定义两个<gateway>定义。

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

在两个<gateway> s的情况下,它看起来像第二个赢得,我们只有配置的那部分代理。

+0

感谢Artem的解释。但是,如何确保我调用正确的网关和相关的xml。 – Newbie

+0

不确定你的问题。只要创建一个'',并为每个'@ Gateway'方法指定特定的'request-channel's。 –

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"/>