2014-06-06 55 views
0

我剛剛與Spring Integration握手,並在想我的解釋是否正確。我正在尋找什麼渠道或網關?

據我所知,頻道是單向的,網關是雙向的。

網關的雙向性是請求響應嗎?或者網關是否允許全雙工通信?

基本上我必須編寫一個應用程序,其中兩個組件必須進行通信,而不是簡單的請求/響應模式的通信,它更多的是一個請求,然後是多個響應,每個響應都必須依次處理並轉發到第三個系統。

我可以通過網關來完成這項工作,還是應該爲請求和通道設置響應渠道?

如果這沒有意義,我很樂意詳細說明。

回答

1

是的,你的理解是正確的,是的,網關是請求/響應。

如果你想在組件之間進行異步通信(例如對一個請求有多個回覆),那麼你需要一對通道。

但是,您可以通過使用「無效」網關和入站通道適配器來避免將消息傳遞基礎結構暴露給組件。網關方法返回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> 
+0

你能提供一個如何做到這一點的例子嗎?我在Spring集成方面遇到了一點TMI問題,而且我的腦袋有點慌亂。也是星期五,這是一個漫長的一週。 –

+0

我的意思是'出站通道適配器' - 示例添加到我的答案。 –

+0

我錯過了什麼,是由Spring集成完成的分裂和響應?對不起,如果我有點朦朧。 –