利用延迟队列反复调用查询接口_大数据培训

利用延迟队列反复调用查询接口。

执行策略:

   选择支付渠道后,点击支付后提交到延迟队列,每隔一分钟执行一次查询操作,查询三次。

     首先在消息队列中打开延迟队列配置:在activemq的conf目录下activemq.xml中

 开启 schedulerSupport=”true”

发送延迟队列

public void sendDelayPaymentResult(String outTradeNo,int delaySec,int checkCount){
    //发送支付结果
    
Connection connection = activeMQUtil.getConnection();
    try {
        connection.start();
        Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
        Queue paymentResultQueue = session.createQueue(“PAYMENT_RESULT_CHECK_QUEUE”);
        MessageProducer producer = session.createProducer(paymentResultQueue);
        producer.setDeliveryMode(DeliveryMode.PERSISTENT);
        MapMessage mapMessage= new ActiveMQMapMessage();
        mapMessage.setString(“outTradeNo”,outTradeNo);
        mapMessage.setInt(“delaySec”,delaySec);
        mapMessage.setInt(“checkCount”,checkCount);
        mapMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY,delaySec*1000);
        producer.send(mapMessage);

        session.commit();
        producer.close();
        session.close();
        connection.close();

    } catch (JMSException e) {
        e.printStackTrace();
    }

}

接收延迟队列的消费端

@Component
public class PaymentConsumer {

    @Autowired
    PaymentService paymentService;

    @JmsListener(destination = “PAYMENT_RESULT_CHECK_QUEUE”,containerFactory = “jmsQueueListener”)
    public void consumeCheckResult(MapMessage mapMessage) throws JMSException {
        int delaySec = mapMessage.getInt(“delaySec”);
        String outTradeNo = mapMessage.getString(“outTradeNo”);
        int checkCount = mapMessage.getInt(“checkCount”);

        PaymentInfo paymentInfo=new PaymentInfo();
        paymentInfo.setOutTradeNo(outTradeNo);
        PaymentStatus paymentStatus = paymentService.checkAlipayPayment(paymentInfo);
        if(paymentStatus==PaymentStatus.UNPAID&&checkCount>0){
            System.out.println(“checkCount = ” + checkCount);
            paymentService.sendDelayPaymentResult(outTradeNo,delaySec,checkCount-1);
        }

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值