2016-02-21 37 views
0

是否有編程方式創建TCP連接工廠和TCP-IO綁定通道適配器。彈簧集成 - 動態TCP工廠和通道連接

我正在創建一個在其數據庫中具有TCP連接詳細信息的應用程序。預計TCP連接將增長。連接性的增加需要不重新啓動服務器。即如果新的TCP服務器連接細節插入到數據庫中,則應用程序應編程地選擇連接細節,並在需要時使用Spring集成啓動TCP通信,並且不應爲此目的重新啓動應用程序。

目前我有5個TCP客戶端,在我的應用程序中,連接到不同的TCP serverSockets。我爲每個連接維護5個XML文件。但是這不支持可伸縮性,因爲每個新的serverSocket我都必須在我的應用程序中添加一個新的配置文件,並且需要重新啓動它。

+0

你能告訴我你的示例代碼我。也有更多的TCP客戶端,在我的應用程序中,連接到不同的TCP serverSocket? – Shailesh

+0

@Shailesh請訪問這個答案。 http://stackoverflow.com/questions/39062895/spring-integration-tcp-get-connection-id-of-the-connected-clients/39062897#39062897 – learner

+0

@Shailesh。讓我知道你是否需要更多的澄清。 – learner

回答

0

請參閱dynamic-ftp sample這是爲ftp出站適配器執行此操作。

實質上,它使用自定義路由器爲適配器按需創建新的應用程序上下文。

另請參閱this answer其中有關於在郵件適配器的入站端做類似的事情的其他答案的鏈接,這次使用Java配置。

EDIT

響應於下面的評論。

對於正常的請求/回覆處理,使用入站網關,框架將負責將服務激活器回覆路由到正確的套接字。它通過使用連接標頭來完成。

如果您需要提供任意答覆(例如,對於消息不止一個答覆,您必須使用入站和出站通道適配器和您的應用程序負責建立連接ID頭。

有兩種方式來訪問所需要的頭在由服務激活調用的POJO:

public void foo(byte[] payload, @Header(IpHeaders.CONNECTION_ID) String connectionId) { 
    ... 
} 

public void foo(Message<byte[]> message) { 
    String connectionId = message.getHeaders().get(...); 
} 

然後,當你把你的回覆,你需要以某種方式設置標題

+0

嗨加里,我在這裏有一個問題,上面的動態TCP連接方法。收到消息時,我想獲取收到的消息的TCP連接詳細信息。這樣我可以跟蹤發送該消息的發件人的應用程序。但在服務激活器,我無法得到這個細節。當我的TCP客戶端期待從服務器回覆時,還需要連接詳細信息。有關信息,我的應用程序有多個TCP客戶端和服務器。 – learner

+0

你應該真的提出一個新的問題;但看到我的編輯。 –

+0

對不起。我現在把它作爲一個問題發佈。感謝您對我的查詢的友好和快速響應。 http://stackoverflow.com/questions/39062895/spring-integration-tcp-get-connection-id-of-the-connected-clients/39062897#39062897 – learner