是的,你的理解是正確的,是的,網關是請求/響應。
如果你想在組件之間進行異步通信(例如對一個請求有多個回覆),那麼你需要一對通道。
但是,您可以通過使用「無效」網關和入站通道適配器來避免將消息傳遞基礎結構暴露給組件。網關方法返回void(無響應),並且出站通道適配器調用POjo「響應」方法。
編輯:
此示例發送到陣列通過網關Spring集成流量,並得到各個元件背面爲一系列的「響應」 ...
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上下文.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>
你能提供一個如何做到這一點的例子嗎?我在Spring集成方面遇到了一點TMI問題,而且我的腦袋有點慌亂。也是星期五,這是一個漫長的一週。 –
我的意思是'出站通道適配器' - 示例添加到我的答案。 –
我錯過了什麼,是由Spring集成完成的分裂和響應?對不起,如果我有點朦朧。 –