Jakarta ee 如何进行长期HTTP交付重试?

Jakarta ee 如何进行长期HTTP交付重试?,jakarta-ee,ejb,Jakarta Ee,Ejb,情景: JMS队列中的许多消息 MDB将它们交付到远程HTTP服务器 远程服务器可能已关闭 需要一种不会阻塞整个服务器的重试机制 每1小时进行几天的重新交付 我的想法是,当新消息到达JMS队列时,让MDB立即尝试重新交付,但要将此限制为(比如)每1分钟5次。然后将消息从JMS队列中删除并放入数据库中。另一个(@Scheduled)EJB将每隔1小时从DB接收未发送的消息,并在其自己的线程中发送它们 有更简单的方法吗?有,但这取决于您使用的JMS提供程序。不幸的是,目前jmsapi中不支持延迟消息

情景:

  • JMS队列中的许多消息
  • MDB将它们交付到远程HTTP服务器
  • 远程服务器可能已关闭
  • 需要一种不会阻塞整个服务器的重试机制
  • 每1小时进行几天的重新交付
  • 我的想法是,当新消息到达JMS队列时,让MDB立即尝试重新交付,但要将此限制为(比如)每1分钟5次。然后将消息从JMS队列中删除并放入数据库中。另一个(@Scheduled)EJB将每隔1小时从DB接收未发送的消息,并在其自己的线程中发送它们


    有更简单的方法吗?

    有,但这取决于您使用的JMS提供程序。不幸的是,目前jmsapi中不支持延迟消息,这无疑是解决问题的最优雅的解决方案。但是,如果您正在使用以下一些JMS提供程序:Oracle AQ、JBoss、OpenJMS、ActiveMQ;它们内置支持通过呼叫发送延迟消息:

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