ActiveMQ 訊息確認

2022-08-30 22:27:31 字數 1909 閱讀 5579

一、事務性會話當乙個事務被提交的時候,確認自動發生

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...