使用rabbitMQ延时插件如果超过4294967295,此时消息就会立即被消费。
解决方法:
在发送延时服务中,将超出4294967295的消息放入中转延时MQ,比如中转延时3456000000,到时继续回调该服务,直到正常发送;
public void sendDelay(String orderId) {
long delayedMills = 未来时间 - System.currentTimeMillis();//需要延时的时长
if (delayedMills > 4294967295L) {
//超出最大值,发送到中转MQ ,继续回调该服务
MqMessage mqMessage = MqMessageBuilder().setAppId(xxxAppid).setMsgTag(xxxMsgTag)
.setMsgType(中转xxxx.getMsgType()).setMsgBodyObject(orderId)
.getMqMessage();
mqMessage.setDelayedMills(3456000000L);
rabbitMqTemplate.sendMsg(mqMessage, JttMsgExchanges.DELAY);
} else {
//未超出上限正常发送延时
MqMessage mqMessage = new MqMessageBuilder().setAppId(xxxAppid).setMsgTag(xxxMsgTag)
.setMsgType(xxxx.getMsgType()).setMsgBodyObject(orderId)
.getMqMessage();
mqMessage.setDelayedMills(delayedMills);
rabbitMqTemplate.sendMsg(mqMessage, JttMsgExchanges.DELAY);
}
}