2015-05-24 21 views
1

基於我自己的實驗(無法在任何地方找到這個文件),如果2個消息具有相同的相關ID和序列號,聚合器將只取第一個消息,丟棄/忽略其他消息。在春季覆蓋具有相同相關ID和序列號的消息

有沒有辦法讓聚合器使用接收到的最後一條消息呢?

聚合將合併有效載荷爲1個字符串。

簡單情形: 3個消息具有相同的相關ID和2序列大小,按時間排序接收

  • 序列#:1;有效載荷:abc
  • 序列號:1;有效載荷:def
  • 序列號:2;有效載荷:GHI

電流輸出:abcghi

預期輸出:defghi

當序列#2是缺失的,其是指用於第一消息這種情況發生。相關ID(從解碼的有效載荷中獲得)非常有限,因此它將被多次使用。

原始消息

原始消息來以這種格式:

  • 「序列大小」, 「序列號」, 「ID」, 「文本」
  • ID之間0的範圍-9
  • 示例消息:2,1,8,ABC

樣品原料messag e淨荷:

  • 2,1,8,ABC
  • 2,1,8,高清
  • 2,2,8,GHI

的聚合基本上結合了文本

回答

0

您需要使用自定義發佈策略(它可以具有與默認SequenceSizeReleaseStrategy相同的邏輯,但不能是該類)。使用默認策略時,跳過重複序列。

但是,您還需要自定義消息組存儲來制定所需的行爲;否則輸出將是abcdefghi

但是,在這種情況下,丟棄的消息將不會被髮送到丟棄通道。

重用相關標識通常不是一個好主意;如果必須,請在使用關聯標識的任何可能性之前使用group-timeout或收割者放棄該部分組。

順便說一句,您可能會發現使用自定義CorrelationStrategyReleaseStrategy比使用默認和操作標頭更容易。

+0

謝謝加里! 建議,我目前正在搞清楚如何定製這個(使用非默認)主要是覆蓋相同的序列的消息。 和FYI,是它的一個必須爲我的情況重用correlationId,因爲它是從消息的有效載荷派生,我無法操縱。 我已經使用了組超時,但它沒有按照我的預期行事。你可以參考我的另一個問題: http://stackoverflow.com/questions/30421220/group-timeout-does-not-work-as-expected-in-spring-aggregator/30424784 將盡快更新。 – psyntium

+0

糾正我,如果我在這裏錯了,correlatestrategy只是告訴哪個消息屬於哪個組,並且releasestragy是要告訴分組消息何時可以繼續下一個路徑。我的重點應放在自定義消息組上,以便消息具有相同的seq。號碼將覆蓋舊的號碼。我錯了嗎? – psyntium

+0

你有任何一個樣品自定義消息組存儲? – psyntium