2016-10-06 40 views
0

我想知道當我們收到ACK時會發生什麼。我們是在單線程還是在多線程中收到ACK?
handleAck和handleNack方法是由單個線程還是多個線程使用?如果它們被單個線程使用,那麼它是可以的。但是如果它們被多個線程使用,那麼我們必須以線程安全的方式構造我們的代碼。Java RabbitMQ客戶端中的ConfirmListener是否需要同步?

回答

1

你不應該需要編寫代碼ConfirmListener線程安全的,但不是因爲acknack方法將不會被多個線程調用,但是因爲你不應該共享Channel線程之間,與開始。

documentation明確要求這一點:

雖然對渠道的一些操作是安全的併發調用, 有些不是,將導致不正確的幀上的 絲交織。在線程之間共享頻道也會干擾發行商確認。

當您發佈給經紀人時,不要共享頻道。渠道是輕量級的,並不昂貴創建。那樣你也不用擔心確認。

如果您確實共享頻道,您的確認將會受到上述報價的干擾。

相關問題