2012-07-06 58 views
2

我讀了這個問題(Multithreaded JMS code : CLIENT_ACKNOWLEDGE or transacted session),但我不明白是什麼在消息消費者這兩種方法之間的區別:CLIENT_ACKNOWLEDGE VS Session.commit()在消費端 - JMS

  1. 連接不辦理。會話處於CLIENT_ACKNOWLEDGE模式。我們收到多條消息,然後一條acknowledge()
  2. 連接已成交(不是xa)。會話處於AUTO_ACKNOWLEDGE模式。我們收到多條消息,然後執行commit()

這是否取決於消息提供者的行爲?

回答

3

我認爲從一個目的地收到消息時沒有太大的區別。可以使用CLIENT_ACKNOWLEDGE或者Transacted會話。

但是,當在一個會話中使用多個目的地時,比如說從一個隊列中接收消息,然後處理它並在同一個會話中將流程結果發佈到另一個主題,那麼事務處理會更適合。所以接收和發佈消息都會發生在一個事務中。基於消息處理的結果,事務可以被提交或回滾。