diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index 2c310c8c..4e3f01f1 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -826,7 +826,16 @@ public class DatabaseStore { } } WFCMessage.Message message = builder.build(); - messages.add(message); + boolean expired = false; + if (message.getContent().getExpireDuration() > 0) { + if (System.currentTimeMillis() > message.getServerTimestamp() + message.getContent().getExpireDuration()*1000) { + expired = true; + } + } + + if (!expired) { + messages.add(message); + } } if (count == 0) { diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 76a3b8e5..56ec4d8f 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -493,7 +493,7 @@ public class MemoryMessagesStore implements IMessagesStore { } if (bundle.getMessage().getContent().getExpireDuration() > 0) { - if (System.currentTimeMillis() < bundle.getMessage().getServerTimestamp() + bundle.getMessage().getContent().getExpireDuration()) { + if (System.currentTimeMillis() > bundle.getMessage().getServerTimestamp() + bundle.getMessage().getContent().getExpireDuration()*1000) { continue; } } @@ -587,6 +587,12 @@ public class MemoryMessagesStore implements IMessagesStore { MessageBundle bundle = mIMap.get(targetMessageId); if (bundle != null) { if (exceptClientId == null || !exceptClientId.equals(bundle.getFromClientId()) || !fromUser.equals(bundle.getFromUser())) { + if (bundle.getMessage().getContent().getExpireDuration() > 0) { + if (System.currentTimeMillis() > bundle.getMessage().getServerTimestamp() + bundle.getMessage().getContent().getExpireDuration() * 1000) { + continue; + } + } + size += bundle.getMessage().getSerializedSize(); if (size >= 3 * 1024 * 1024) { //3M break;