我们在MySQL中维护一个表,其中包含将通知推送到的所有gcmid。随着时间的流逝,某些内容可能会过期,因为用户可能会卸载该应用程序或使用另一个版本将其过载。但是,它可能已经过期,当我们尝试向这些设备发送推送通知时,FCM会以“ nack” 消息响应,并带有 DEVICE_UNlocated 或类似的错误代码。使用此信息,我将从数据库中删除此gcmid。
但是问题是,对于每个message_id,我都会收到更多通知。我已经在 XMPP连接中添加了SyncStanzaListener,如果是nack消息,它会监听并继续传递给我的服务。结果,CPU激增,因为要处理大量消息。因此,一台机器在生产中死亡。
我还尝试过向该特定gcmid发送“ ack” 消息,并确认我已收到该消息ID。我还是一遍又一遍地收到相同的消息。
有什么想法吗?
我尝试用ttl将所有消息ID存储在Redis中。但是,问题是,我不应该为具有相同消息ID的特定过期gcmid接收到如此多的信号吗?有时我最多收到30个带有相同消息ID的袜子。