簡體   English   中英

Spring Integration中的並行處理

[英]Parallel processing in Spring Integration

我需要依次處理具有相同參考 ID 但不同參考 ID 的交易,因為它們是獨立的。 交易可以有各種事件,因此無法並行處理相同的交易,因為它們修改了交易的同一實例導致意外更新。

我正在使用 Spring 集成框架來處理交易,但任務執行器正在並行處理所有交易,即使其中一些交易共享相同的參考 ID 但不同的事件。 所以請分享代碼片段來處理這種情況,因為我找不到任何解決方案。

謝謝

我不確定這是否會奏效,但我認為它會奏效。 在您處理交易的方法中,同步 ID 的實習版本。 (我假設 id 是一個字符串。)

{
   String a = "some string";  // this is already intern'ed.
   String b = new String("some string");  // this is not.  You might have gotten the value from user, or whatever

   boolean b1 = a == b;  // false
   boolean b2 = a.equals(b);  // true
   boolean b3 = a.intern() == b.intern();  // Always true if b2 was true
}

所以關鍵是,如果你實習多個字符串,如果其中兩個是相同的值,你實際上會得到相同的字符串。 所以,在你交給執行者的 runnable 中,

public void run() {
    synchronize(trade.getId().intern()) {
        // process trade
    }
}

我不確定它是否會起作用的唯一原因是我不確定您是否可以在 String 的內部版本上進行同步,因為它就像一個靜態元素。 我真的不明白為什么不,但你應該建立一個實驗來確定。

讓我們看看LockRegistry可以幫助您! 因此,您獲得了“參考 ID”的Lock ,並且在您在一個線程中完成之前,不要讓其他線程對您的特定Trade進行操作。

您可以使用WhileLockedProcessor以獲得更清晰的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM