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


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

    执行策略:

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

         首先在消息队列中打开延迟队列配置:在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);
            }

        }

    }

     

  • 相关阅读:
    C&C!无法检测的远程命令执行工具
    QT 按钮的工具提示tooltips设置字体大小颜色与背景
    WeNet更新:喜马拉雅团队在 WeNet 中支持 Squeezeformer
    【分布式服务架构】常用的RPC框架
    2022年9月7日-天正软件CAD二次开发-C++windows桌面开发岗
    2024年Nano编辑器最新使用教程
    Idea如何上传项目至GitHub
    C语言面试题 - 指针声明
    迁移学习(COAL)《Generalized Domain Adaptation with Covariate and Label Shift CO-ALignment》
    [附源码]计算机毕业设计JAVA竞价拍卖系统
  • 原文地址:https://blog.csdn.net/zjjcchina/article/details/127648580