一、事務性會話:當乙個事務被提交的時候,確認自動發生
connectionfactory connectionfactory=new activemqconnectionfactory("tcp:");connection connection =connectionfactory.createconnection();
connection.start();session session=connection.createsession(boolean.true, session.auto_acknowledge);destination queue=session.createqueue("my-queue1");
messageconsumer consumer =session.createconsumer(queue);
int i=0;
while (i<3)
session.close();
connection.close();
}
如果事務性會話中,不執行 session.commit(),訊息不會建立或被消費。
二、在非事務性會話中:訊息何時被確認取決於建立會話時的應答模式(acknowledgement mode)。該引數有以下三個可選值:
session.auto_acknowledge:當客戶成功的從receive方法返回的時候,或者從messagelistener.onmessage方法成功返回的時候,會話自動確認客戶收到的訊息。
session session=connection.createsession(boolean.false, session.auto_acknowledge);
session.client_acknowledge:客戶通過呼叫訊息的acknowledge方法確認訊息。需要注意的是,在這種模式中,確認是在會話層上進行,確認乙個被消費的訊息
將自動確認所有已被會話消費的訊息。例如,如果乙個訊息消費者消費了10 個訊息,然後確認第5 個訊息,那麼所有10 個訊息都被確認。
connectionfactory connectionfactory=new activemqconnectionfactory("tcp:");connection connection =connectionfactory.createconnection();
connection.start();
session session=connection.createsession(boolean.false, session.client_acknowledge);
destination queue=session.createqueue("my-queue2");
messageconsumer consumer =session.createconsumer(queue);
int i=0;
while (i<3)
i++;
}
session.close();
connection.close();
}
session.dups_acknowledge:該選擇只是會話遲鈍的確認訊息的提交。如果jms provider失敗,那麼可能會導致一些重複的訊息。如果是重複的訊息,那麼jms provider 必須把訊息頭的jmsredelivered欄位設定為true。
ActiveMQ 監聽和確認
public class producer producer.close connection.close 值得注意的是session.client acknowledge,需要consumer進行返回確認才會進行刪除。一般來說,如果只是簡單的佇列,pop之後,資料就和佇列無關了。如果消費端服務異常...
ActiveMQ訊息佇列
這個東西沒接觸到的時候挺懵的,用過一次之後,哇哦 public class producter catch jm ception e public void sendmessage string disname,listlist else thread.sleep 1000 int num coun...
Activemq訊息型別
activemq訊息型別 jms規範中的訊息型別包括textmessage mapmessage objectmessage bytesmessage 和streammessage 等五種。activemq也有對應的實現,下面我們結合spring jms分別來看一下五種訊息型別的收發 1 textm...