记一次生产环境踩过的坑

欢迎访问个人博客 德鲁大叔撸代码

今天,自己负责开发的对账系统终于要上线了。
激动又紧张!!
激动什么?完全个人开发的项目第一次走上线流程,甚是激动啊!
紧张什么?对呀,就是因为第一次上线,所以怕出现什么不可预测的问题,毕竟公司会把上线成功率当做有个绩效考核标准之一啊。

经过仔细的准备配置文件、任务调度和mq相关的配置,终于可以安全上线了。当自己的项目发布成功的时候,心里所有悬着的担忧可以落地了。可喜可贺啊!

但是!!!!!!
在做生产验证的时候,监听上游的mq没法接受上游给我的mq消息体。操蛋!刚放心这就立马来了问题!
我测试环境和本地是没问题的啊!
突然意识到,可能是上游给我的消息不合规范。经过和上游同事的沟通,果然是被她坑了啊。

她一直给我的mq消息体是这样的:

{sysId=TOP, transDate=null, settleDate=20200317, merType=null, prodId=TOP, ordId=20200318132805569, fileType=1, fileId=c1180406050a4df89de429c939288e90}

对于这样的消息体,我是这样接受的:

@Override
    @JmsListener(destination = "POSCASH_TRANS_CHECK_FILE_ID_QUEUE_TOP")
    public void onMessage(Message message) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd").withZone(ZoneId.systemDefault());
        String checkDate = dateTimeFormatter.format(Instant.now());
        String transDate = null;
        try {
            log.info("收到刷卡交易对账单下发mq,开始执行刷卡交易对账");
            String text= ((TextMessage) message).getText();
            log.info("收到刷卡交易的mq消息体:{}",text);
            int lastIndex = text.lastIndexOf("=");
            String findstr = "fileType=";
            String fileId = text.substring(lastIndex+1,text.length()-1);
            String fileType = text.substring(text.indexOf(findstr)+9,text.indexOf(findstr)+10);
            toprsCheckService.posCheck(fileType,fileId,checkDate);
        } catch (JMSException e) {
            log.info("[接受mq异常],错误信息:{}",e.getMessage());
        }catch (Exception e){
            log.info("[刷卡交易对账失败],错误信息:{}",e.getMessage());
        }
    }

但是,她的生产环境的mq消息体是这样的:

{"sysId":"TOP","settleDate":"20200325","prodId":"TOP","ordId":"20200331155619651","fileType":"1","fileId":"10a006d18dc340f08581566eef1df32e"}

那肯定拿不到啊,原来,她给我的是她日志中打出来的信息,并非原始的mq消息体。
在和她做过沟通后,更改我接受mq的代码如下:

@Override
    @JmsListener(destination = "POSCASH_TRANS_CHECK_FILE_ID_QUEUE_TOP")
    public void onMessage(Message message) {
        String checkDate = DateTools.getCurDateYYYYMMDD();
         log.info("收到刷卡交易对账单下发mq,开始执行刷卡交易对账");
        if (message == null) {
            log.info("[获取异步消息] 为空:{}", JSONObject.toJSONString(message));
            return;
        }
        log.info("[获取异步消息] message:{}", JSONObject.toJSONString(message));
        if (!(message instanceof ObjectMessage)) {
            log.info("[获取异步消息] ObjectMessage:{}", JSONObject.toJSONString(message));
            return;
        }
        try {
            ObjectMessage objMessage = (ObjectMessage) message;
            Object text = objMessage.getObject();
            log.info("收到刷卡交易的mq消息体:{}",text);
            JSONObject jsonObject = JSONObject.parseObject(text.toString());
            String fileId = jsonObject.getString("fileId");
            String fileType = jsonObject.getString("fileType");
            toprsCheckService.posCheck(fileType,fileId,checkDate);
        } catch (JMSException e) {
            log.info("[接受mq异常],错误信息:{}",e.getMessage());
        }catch (Exception e){
            log.info("[刷卡交易对账失败],错误信息:{}",e.getMessage());
        }
    }

经过这个小坑,终于可以紧急上线了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值