0

设想:

  1. JMS 队列中的许多消息
  2. MDB 将它们传送到远程 HTTP 服务器
  3. 远程服务器可能已关闭
  4. 需要不会阻塞整个服务器的重试机制。
  5. 重新交付运行几天,每 1 小时一次。

我的想法是让 MDB 在新消息到达 JMS 队列时立即尝试重新传递,但将其限制为每 1 分钟 5 次。然后将消息从 JMS 队列中删除并放入数据库中。然后,另一个(@Scheduled)EJB 将每 1 小时从 DB 获取未发送的消息,并在自己的线程中发送它们。

有没有更简单的方法来做到这一点?

4

1 回答 1

1

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

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

参考:

于 2013-02-16T13:15:56.670 回答