2017-09-03 16 views
0

我正在開發一個支持通過Spring Integration進行TCP連接的Web應用程序。 它有兩個功能。如何擴展TCP出站網關,以便在Spring集成中只接收消息

  1. 將消息發送到服務器,並在同一時間接收來自服務器的答覆
  2. 剛剛收到來自服務器的消息

(在服務器上的應用程序不是由Spring集成開發。)

在在這種情況下,應使用TCP適配器,並且我需要提供協作TCP出站和入站通道適配器。 但是,我的應用程序有一些限制。

  1. 此應用程序沒有數據庫。
  2. 消息的有效載荷格式已經被指定。 (這意味着我不能添加任何相關數據,如事務ID,以有效載荷。

所以,我認爲,合作TCP出站和入站通道適配器是困難的。然後,我計劃把TCP出站網關添加剛剛收到的消息功能。 我應該怎樣提前延期嗎?(或者你有其他的想法?)

感謝。

回答

0

如果你能確定消息類型,這樣的事情應該工作...

public class ExtendedTcpOutpboundGateway extends TcpOutboundGateway { 

    private final MessageChannel unsolicitedMessageChannel; 


    public ExtendedTcpOutpboundGateway(MessageChannel unsolicitedMessageChannel) { 
     this.unsolicitedMessageChannel = unsolicitedMessageChannel; 
    } 

    @Override 
    public boolean onMessage(Message<?> message) { 
     if (isUnsolicitedMessage(message)) { 
      this.messagingTemplate.send(this.unsolicitedMessageChannel, message); 
      return false; 
     } 
     else { 
      return super.onMessage(message); 
     } 
    } 

    private boolean isUnsolicitedMessage(Message<?> message) { 
     // TODO Add logic here to determine message type 
     return false; 
    } 

} 

如果您無法區分差異,則不清楚如何實施您的要求。

+0

加里羅素,非常感謝你的答案,一個很好的例子! – Neriudon

相關問題