我們正在使用TCP集成進行TCP通信,並且看到在該連接的消息之前收到TcpConnectionCloseEvent的行爲。確保彈簧集成事件的順序正確
這是一個問題,因爲我們正在使用TCP事件來跟蹤連接等,當我們需要接受我們認爲關閉的連接上的消息時,它會產生更復雜的情況。
反過來也是如此 - 有時我們會收到一條消息,表明我們尚未知道的連接已經打開。
是否有任何方法可以確保這些事件的正確順序,即使它們本質上是異步的?
(感謝在這裏stackoverflow,加里偉大的答案)。
我們正在使用TCP集成進行TCP通信,並且看到在該連接的消息之前收到TcpConnectionCloseEvent的行爲。確保彈簧集成事件的順序正確
這是一個問題,因爲我們正在使用TCP事件來跟蹤連接等,當我們需要接受我們認爲關閉的連接上的消息時,它會產生更復雜的情況。
反過來也是如此 - 有時我們會收到一條消息,表明我們尚未知道的連接已經打開。
是否有任何方法可以確保這些事件的正確順序,即使它們本質上是異步的?
(感謝在這裏stackoverflow,加里偉大的答案)。
嗯...
在服務器端,打開的事件是由接受新的連接,而不是連接本身線程出版。儘管我們可能在那裏做了一些事情,但是在使用NIO時它仍然不是萬無一失的,因爲線程模型更加複雜,即使連接本身發佈了事件,也無法保證順序。老實說,我們沒有預料到事件會以這種方式被使用 - 主要的驅動程序(對於開放事件)是允許應用程序檢測到一個新的連接,而不需要客戶端實際發送任何東西(只是連接) - 允許服務器端應用程序接受新連接,獲取連接ID的句柄,以便發送歡迎消息。
一種解決方法可能是使用事件入站通道適配器和<delayer/>
將事件傳遞延遲到您的應用程序(在關閉的情況下)。
我真的沒有一個很好的解決方案,延遲交付的公開賽;也許只是將「新」連接的入站消息視爲「開放」事件(例如,當您在處理消息的線程上檢測到此情況並忽略「真實」事件時發佈您自己的開放事件)。
好的,謝謝。我們目前正在按照您的描述使用它。我們會繼續這樣做:) – 2014-09-08 06:48:35