gpt4 book ai didi

java - JMS - 失败时消息重新传递

转载 作者:行者123 更新时间:2023-12-01 09:56:03 25 4
gpt4 key购买 nike

我有这样的场景:

  • 通过 MDB 进行 JMS 消息阐述可能会失败(在这种情况下会引发 RuntimeException)
  • 消息应该在延迟后重新传递(理想情况下,但不是绝对必要的:在延迟增加之后,具体取决于失败的数量)
  • 在 x 次失败后,该消息应被忽略并且不再发送

现在,我的行为是失败的消息立即重新发送 10 次,而且我无法对此进行自定义。

有没有办法通过@JMSdefinition(或其他注释)或在消息中设置正确的属性来实现此目的?如果是的话怎么办?

最佳答案

您可以使用 _AMQ_SCHED_DELIVERY 属性安排消息:

    Queue q = (Queue) ServiceLocator.getInstance().getDestination("QUEUE");
QueueConnectionFactory factory = (QueueConnectionFactory) ServiceLocator.getInstance().getConnectionFactory(
"java:/ConnectionFactory");
QueueConnection connection = factory.createQueueConnection();
QueueSession session = null;
QueueSender sender = null;
session = connection.createQueueSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
sender = session.createSender(q);
ObjectMessage msg = session.createObjectMessage();
if (redelivedCount > 0) {
msg.setIntProperty("redelivedCount", redelivedCount);
// schedule to run in 10 secs
msg.setLongProperty("_AMQ_SCHED_DELIVERY", System.currentTimeMillis() + 10000);
}
msg.setStringProperty("action", action);
msg.setObject(params);
sender.send(msg);

关于java - JMS - 失败时消息重新传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37205847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com