发送消息后,在session中会对消息进行封装,添加过期时间
long expiration = 0L;
if (!producer.getDisableMessageTimestamp()) {
long timeStamp = System.currentTimeMillis();
message.setJMSTimestamp(timeStamp);
if (timeToLive > 0) {
expiration = timeToLive + timeStamp;
}
}
message.setJMSExpiration(expiration);
message.setJMSPriority(priority);
message.setJMSRedelivered(false);
broker 检查消息是否过期时,时根据消息 expiration和服务器时间比较大小
public boolean isExpired() {
long expireTime = getExpiration();
return expireTime > 0 && System.currentTimeMillis() > expireTime;
}
如果发送消息的服务器时间和broker 消息时间不同步,将会导致activemq 消息过期过早或者过忙