2017-10-08 52 views
0

我正在監聽帶有特定端口的IP並打印出消息。示例消息如下所示:春季集成TCP按令牌分組

[LOG_PATTERN] ABC1025... 
[LOG_PATTERN] (XYZ-COULD-BE-A-MSG 
[LOG_PATTERN] -WITH-DASH 
[LOG_PATTERN] -SEPARATED-TEXT) 
[LOG_PATTERN] ABC1026... 
[LOG_PATTERN] (DEF-ANOTHER-SAME-KIND 
[LOG_PATTERN] -OF-DASH-SEPARATED-TEXT) 
[LOG_PATTERN] ABC1027... 
... 

如何通過指定開始和結束標記來分組每個消息。所以,當它以ABC開始時,它將組合/分組下一個消息,直到找到下一個ABC。謝謝

回答

0

您應該使用自定義解串器;在the documentation here中描述瞭解串器。

TCP是流媒體協議;這意味着必須爲通過TCP傳輸的數據提供一些結構,因此接收器可以將數據劃分爲離散消息。連接工廠被配置爲使用(de)序列化器在消息負載和通過TCP發送的位之間進行轉換。這是通過分別爲入站和出站消息提供解串器和串行器來完成的。提供了許多標準(德)序列化器。

...

它通常更容易,如果你可以檢測到的一組消息的最後,基於內容(例如)在你的例子),而不是檢測一組新的開始。在檢測到下一個ABC...後,您不能將字節「推回」標準輸入流。

即將到來的5.0版本(目前里程碑7可用)允許通過在PushbackInputStream其中確實允許推回字節(僅1默認,但可配置)它包裝定製InputStream。見Advanced Techniques

...

該框架提供了默認創建簡單TcpNetConnection對象單一實現DefatulTcpNetConnectionSupport。它有兩個屬性pushbackCapable和pushbackBufferSize;當啓用推回時,實現將返回一個將連接的InputStream包裝在PushbackInputStream中的子類。與PushbackInputStream默認值一致,緩衝區大小默認爲1.這使得反序列化程序能夠將「未讀」(推回)字節插入到流中。

在早期版本中,您必須保持預讀字節處於某種狀態;在這種情況下,可能更容易在下游組件中進行聚合。