关于json串和String类型踩的坑

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

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

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@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消息体是这样的:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@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());
}
}

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

坚持原创技术分享,您的支持将鼓励我继续创作!