现象:最新项目有个奇怪的现象,就是一个请求会被执行2次,只收到一次返回结果。
模拟场景如下:一个存钱交易,存100,能收到200,部分代码(是一个dubbo服务)
@Reference(retries=0, timeout = 50000)
private AccountService accountService;
@GetMapping("/deposit/{uid}")
public String deposit(@PathVariable("uid") Long uid) {
String amount = "100";
// 检查用户是否有账户
Account account = accountService.selectByUid(uid);
BigDecimal balance = BigDecimal.ZERO;
if (account == null) {
logger.info(">>>>>>>>>>>>>>> deposit input = " + uid + ", " + amount + ", account = " + account);
balance = new BigDecimal(amount);
accountService.bindAccount(new Account(uid, "622588201365148" + uid, balance));
} else {
logger.info(">>>>>>>>>>>>>>> deposit input = " + uid + ", " + amount + ", account = " + account);
BigDecimal old = account.getBalance();
balance = old.add(new BigDecimal(amount));
account.setBalance(balance);
accountService.bindAccount(account);
}
return "存入成功,目前余额为" + accountService.selectByUid(uid).getBalance();
}
请求如下(每次存100),返回的余额结果看是100,300,500,很奇怪,如下图

查看后台,可以看到每一次请求都被执行了2次
2019-11-25 09:20:22.142 INFO 7516 --- [io-8083-exec-10] com.nacos.demo.api.DepositController : >>>>>>>>>>>>>>> deposit input = 1, 100, account = Account{uid=1, accountNo='6225885012650355', balance=0.00}
2019-11-25 09:20:22.207 INFO 7516 --- [nio-8083-exec-2] com.nacos.demo.api.DepositController : >>>>>>>>>>>>>>> deposit input = 1, 100, account = Account{uid=1, accountNo='6225885012650355', balance=100.00}
2019-11-25 09:20:23.230 INFO 7516 --- [nio-8083-exec-1] com.nacos.demo.api.DepositController : >>>>>>>>>>>>>>> deposit input = 1, 100, account = Account{uid=1, accountNo='6225885012650355', balance=200.00}
2019-11-25 09:20:23.261 INFO 7516 --- [nio-8083-exec-3] com.nacos.demo.api.DepositController : >>>>>>>>>>>>>>> deposit input = 1, 100, account = Account{uid=1, accountNo='6225885012650355', balance=300.00}
2019-11-25 09:20:24.157 INFO 7516 --- [nio-8083-exec-4] com.nacos.demo.api.DepositController : >>>>>>>>>>>>>>> deposit input = 1, 100, account = Account{uid=1, accountNo='6225885012650355', balance=400.00}
2019-11-25 09:20:24.186 INFO 7516 --- [nio-8083-exec-5] com.nacos.demo.api.DepositController : >>>>>>>>>>>>>>> deposit input = 1, 100, account = Account{uid=1, accountNo='6225885012650355', balance=500.00}
2019-11-25 09:20:24.958 INFO 7516 --- [nio-8083-exec-6] com.nacos.demo.api.DepositController : >>>>>>>>>>>>>>> deposit input = 1, 100, account = Account{uid=1, accountNo='6225885012650355', balance=600.00}
2019-11-25 09:20:24.986 INFO 7516 --- [nio-8083-exec-8] com.nacos.demo.api.DepositController : >>>>>>>>>>>>>>> deposit input = 1, 100, account = Account{uid=1, accountNo='6225885012650355', balance=700.00}
2019-11-25 09:20:25.693 INFO 7516 --- [nio-8083-exec-7] com.nacos.demo.api.DepositController : >>>>>>>>>>>>>>> deposit input = 1, 100, account = Account{uid=1, accountNo='6225885012650355', balance=800.00}
2019-11-25 09:20:25.724 INFO 7516 --- [nio-8083-exec-9] com.nacos.demo.api.DepositController : >>>>>>>>>>>>>>> deposit input = 1, 100, account = Account{uid=1, accountNo='6225885012650355', balance=900.00}
查了很久的原因都没找到,然后打开谷歌调试窗口,发现了一行错误Unchecked runtime.lastError: The message port closed before a response was received

然后google和百度了,说是扩展插件有问题,我就装了一个json插件

解决方法:把有问题的扩展插件禁用即可,如果有很多插件的,可以逐个排查。

关闭有问题的插件后请求就正常了,如下图


2万+

被折叠的 条评论
为什么被折叠?



