延時投遞的屬性
延遲的時間 | ScheduledMessage.AMQ_SCHEDULED_DELAY |
重複投遞的時間間隔 | ScheduledMessage.AMQ_SCHEDULED_PERIOD |
重複投遞的次數 | ScheduledMessage.AMQ_SCHEDULED_REPEAT |
try {
for (int i = 0; i < 3; i++) {
TextMessage textMessage = session.createTextMessage("tx msg--" + i);
// 延遲的時間
textMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay);
// 重複投遞的時間間隔
textMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, period);
// 重複投遞的次數
textMessage.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, repeat);
// 此處的意思:該條消息,等待10秒,之後每5秒發送一次,重複發送3次。
messageProducer.send(textMessage);
}
System.out.println("消息發送完成");
} catch (Exception e) {
e.printStackTrace();
消息消費的重試機制是什麼?
消費者收到消息,之後出現異常了,沒有告訴broker確認收到該消息,broker會嘗試再將該消息發送給消費者。嘗試n次,如果消費者還是沒有確認收到該消息,那麼該消息將被放到死信隊列重,之後broker不會再將該消息發送給消費者。
哪些事件會引發消息重發?
① Client用了transactions且再session中調用了rollback
② Client用了transactions且再調用commit之前關閉或者沒有commit
③ Client再CLIENT_ACKNOWLEDGE的傳遞模式下,session中調用了recover
消息重發時間的間隔與次數
間隔:1
次數:6
每秒發6次
有毒消息Poison ACK
一個消息被redelivedred超過默認的最大重發次數(默認6次)時,消費的回個MQ發一個“poison ack”表示這個消息有毒,告訴broker不要再發了。這個時候broker會把這個消息放到DLQ(私信隊列)。
消費者代碼:
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
// 修改默認參數,設置消息消費重試3次
RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
redeliveryPolicy.setMaximumRedeliveries(3);
activeMQConnectionFactory.setRedeliveryPolicy(redeliveryPolicy);
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
final Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(ACTIVEMQ_QUEUE_NAME);
MessageConsumer messageConsumer = session.createConsumer(queue);
messageConsumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("***消費者接收到的消息: " + textMessage.getText());
//session.commit();
}catch (Exception e){
e.printStackTrace();
}
}
}
});
System.in.read();
spring整合:
1.消息生產者如何確保消息成功投遞到mq服務器中?
接收回調