【问题标题】:Retry in JMS MessageDriven Bean在 JMS 消息驱动 Bean 中重试
【发布时间】:2016-03-31 08:08:03
【问题描述】:

我有一个 MessageDriven bean,它使用消息并通过 REST API 将其发送到其他地方。像这样:

@MessageDriven(name = "n", activationConfig = {...})
public class SubmitMessageBean implements MessageListener {

    @Resource
    private MessageDrivenContext context;

    @Override
    public void onMessage(final Message message) {
        try {
            // Submit data to somewhere with REST API
        } catch (IOException ex) {
            this.context.getRollbackOnly();
        } catch (JMSException ex) {
            e.printStackTrace();
        }
    }
}

当发生错误时,我想在一分钟后重试发送。无论如何它都可以这样做吗?

【问题讨论】:

    标签: java jakarta-ee jms


    【解决方案1】:

    好的,我想通了。您还可以轻松添加延迟,让远程系统有更多时间解决错误。

    @MessageDriven(name = "n", activationConfig = {...})
    public class SubmitMessageBean implements MessageListener {
    
       @Inject
       JMSContext context;
    
       @Resource(mappedName = "...")
       Queue queue;
    
        @Override
        public void onMessage(Message message) {
            Integer retry = 0;
            try {
                // track how many time we tried before
                retry = message.getIntProperty("retry");
    
                // Submit data to somewhere with REST API
            } catch (IOException ex) {
                // Put it back in queue again
                // You can limit number of retry by keeping retry variable 
                if (retry < 5) {
                    JMSProducer producer = this.context.createProducer();
                    producer.setProperty("retry", r);
                    // Add some delay to start it again after a minute
                    producer.setDeliveryDelay(60000);
                    // Send it again with send()
                }
            } catch (JMSException ex) {
                e.printStackTrace();
            }
        }
    }
    

    当然,您需要用自己的正确值填充 {...}。

    【讨论】:

      猜你喜欢
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 2017-08-04
      • 2018-02-10
      • 1970-01-01
      • 2011-08-05
      • 2015-09-27
      相关资源
      最近更新 更多