2012-11-21 106 views
1

JMS隊列中是否存在任何事務隔離級別,如JDBCJMS中的隔離級別

更具體地說,在過渡模式下,當客戶端消費一個消息但尚未提交時,下一個客戶端是否會使用下一條消息?如果第一個客戶端回滾轉換,那麼將消息放入隊列中,我認爲它將放置在更早的位置。

回答

3

簡短回答:

JMS發送或者是事務性的,也就是說,當發送方事務提交或立即(即使客戶端稍後發送事務回滾)時,消息是「提交」(對代理和MDB可見)。

JMS接收也具有簡單的開/關事務:當消息被MDB拾取時(非事務性)或者MDB毫無例外地返回(事務性)時,消息被標記爲接收。

+0

您的意思是標記爲已收到的郵件在第一位用戶回滾之前不會提供給其他任何用戶? –

+1

@labbhattacharjee:當事務消費者接收到消息時,如果消費者回滾以使其他消費者可以重試,則該消息可以返回隊列。當非事務消費者接收到消息時,它將完全從隊列中移除,並且如果消費者回滾或拋出錯誤,消息將丟失(不會再次處理) –

0

事務隔離是關於數據庫表更改的可見性。 JMS消息是不可變的,你發送它一次,你不能改變它。

+0

仍處於過渡模式,消費者需要明確提交/回滾,對?客戶的未提交消費是否可見? –

+0

好的。我們可以說JMS中只有一個級別 - 讀取承諾。那個怎麼樣? –