如何进行长期HTTP传递重试?

时间:2013-02-15 11:06:47

标签: java-ee ejb

情景:

  1. JMS队列中的许多消息
  2. MDB将它们传送到远程HTTP服务器
  3. 远程服务器可以关闭
  4. 需要重试机制,不会阻塞整个服务器。
  5. 重新递送每隔1小时运行几天。
  6. 我的想法是,当新消息到达JMS队列时,让MDB立即尝试重新发送,但是每隔1分钟将其限制为5次。然后从JMS队列中删除该消息并将其放入数据库中。然后,另一个(@Scheduled)EJB将每隔1小时从DB中获取未发送的消息,并将其发送到自己的线程中。

    有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

是的,有,但它取决于您使用的JMS提供程序。不幸的是,目前在JMS API中不支持延迟消息,这绝对是您问题的最优雅解决方案。但是,如果您使用以下某些JMS提供程序:Oracle AQ,JBoss,OpenJMS,ActiveMQ;他们通过调用内置了对延迟消息的支持:

msg.setLongProperty("SOME-PROVIDER-SPECIFIC-PARAMETER, delay);

参考: