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