1、事務(指服務端,對客戶端不生效)服務器
消息分爲事務消息和非事務消息session
一、事務消息:建立會話Session使用transacted=truespa
connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);事務 |
二、非事務消息:建立會話Session使用transacted=falseci
connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);it |
事務消息必須在發送和接收完消息後顯式地調用session.commit();io
事務性消息,無論設置何種消息確認模式,都會自動被確認;與設置的確認機制無關,但官方推薦事務性消息使用事務確認機制.table
2、確認機制(指客戶端,對服務端不生效)class
(1)、Session.AUTO_ACKNOWLEDGE;客戶(消費者)成功從receive方法返回時,或者從MessageListener.onMessage方法成功返回時,會話自動確認消息,而後自動刪除消息.List
(2)、Session.CLIENT_ACKNOWLEDGE;客戶經過顯式調用消息的acknowledge方法確認消息,。 即在接收端調用message.acknowledge();方法,不然,消息是不會被刪除的.
(3)、Session. DUPS_OK_ACKNOWLEDGE ;不是必須確認,是一種「懶散的」消息確認,消息可能會重複發送,在第二次從新傳送消息時,消息頭的JMSRedelivered會被置爲true標識當前消息已經傳送過一次,客戶端須要進行消息的重複處理控制。
(4)、 Session.SESSION_TRANSACTED;事務提交併確認。
3、消息持久化
2.8 ActiveMQ持久化消息與非持久化消息
messageProducer.setDeliveryMode(DeliveryMode. NON_PERSISTENT);//不持久化 PERSISTENT);//持久化的,固然activemq發送消息默認都是持久化的 |
說明:
設置完後,若是爲持久化,那麼消息在沒有被消費前都會被寫入本地磁盤kahadb文件中保存起來,即便服務器宕機,也不會影響
消息.若是是非持久化的,那麼,服務一旦宕機之類的狀況發生,消息即會被刪除.
ActiveMQ默認是持久化的.