我正在寻找的渠道或网关是什么?

时间:2014-06-06 12:21:30

标签: spring-integration

我刚刚接触Spring Integration,并想知道我对此的解释是否正确。

据我了解,频道是单向的,网关是双向的。

是否是网关的双向性是请求响应的情况?或者网关是否允许全双工通信?

基本上我必须编写一个两个组件必须通信的应用程序,而不是一个简单的通信请求/响应模式,它更多的是一个请求后跟多个响应,每个响应必须依次处理转发到第三个系统。

我可以使用网关执行此操作,还是应该为请求设置通道和响应通道?

如果这没有意义,我很乐意详细说明。

1 个答案:

答案 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>