- 业务需求为服务端给未打卡用户推送模板消息,每天提醒一次,局部代码如下:
//给未打卡用户推送微信模板消息
for (ClockApply apply : applyList) {
iNoticeService.sendNotice(apply.getUserId(), apply.getClockActivityName());
}
- 功能在正常使用了一段时间的情况下,某一天开始用户会同时接受到两条一模一样的消息,几个测试帐号都有这个问题。
- 经过确认,使用期间代码没有任何改动,并且检查日志也没有发现任何问题,确实只发送了一条消息。
- 然后代码修改成只给几个测试用户发消息,多次测试未能复现问题,代码如下:
//给未打卡用户推送微信模板消息
for (ClockApply apply : applyList) {
if (!apply.isTestUser()) {
continue;
}
iNoticeService.sendNotice(apply.getUserId(), apply.getClockActivityName());
}
-
但是将代码还原后第二天又出现了重复发送的问题;怀疑是发送人数过多导致的,因为期间只有人数发生了改变,从十几个人增长到了上百人,重复发送的bug是在人数达到一百四五十时出现的;所以怀疑是发送频率过高。
-
将代码改为每次发送休眠2秒后,再也没出现重复发送的问题,修改后代码如下:
//给未打卡用户推送微信模板消息
for (ClockApply apply : applyList) {
iNoticeService.sendNotice(apply.getUserId(), apply.getClockActivityName());
Thread.sleep(2000);
}
- 微信公众号模板消息运营规范,中不允许频繁主动给用户发通知,所以不建议这样使用模板消息。