我刚刚接触Spring Integration,并想知道我对此的解释是否正确。
据我了解,频道是单向的,网关是双向的。
是否是网关的双向性是请求响应的情况?或者网关是否允许全双工通信?
基本上我必须编写一个两个组件必须通信的应用程序,而不是一个简单的通信请求/响应模式,它更多的是一个请求后跟多个响应,每个响应必须依次处理转发到第三个系统。
我可以使用网关执行此操作,还是应该为请求设置通道和响应通道?
如果这没有意义,我很乐意详细说明。
答案 0 :(得分:1)
是的,您的理解是正确的,是的,网关是请求/响应。
如果您想在组件之间进行异步通信(例如,请求的多个回复),那么,您需要一对通道。
但是,您可以通过使用" void"来避免将消息传递基础结构暴露给您的组件。网关和入站通道适配器。网关方法返回void(无响应)并且出站通道适配器调用您的pojo"响应"方法
编辑:
此示例通过网关将数组发送到Spring Integration流中,并将各个元素作为一系列"响应" ...
返回public class Foo {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("foo-context.xml", Foo.class);
context.getBean(Sender.class).send(new String[] {"foo", "bar", "baz"});
context.close();
}
public interface Sender {
void send (String[] foo);
}
public static class Bar {
public void receive(String reply) {
System.out.println(reply);
}
}
}
使用foo-context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-4.0.xsd">
<int:gateway service-interface="foo.Foo$Sender"
default-request-channel="split" />
<int:channel id="split" />
<int:splitter input-channel="split" output-channel="replies" />
<int:channel id="replies" />
<int:outbound-channel-adapter channel="replies" method="receive">
<bean class="foo.Foo$Bar"/>
</int:outbound-channel-adapter>
</beans>