/** * Checks if 'requestMessage' wasn't delayed before ({@link #releaseMessageAfterDelay} * and {@link DelayHandler.DelayedMessageWrapper}). Than determine 'delay' for * 'requestMessage' ({@link #determineDelayForMessage}) and if {@code delay > 0} * schedules 'releaseMessage' task after 'delay'. * @param requestMessage - the Message which may be delayed. * @return - {@code null} if 'requestMessage' is delayed, otherwise - 'payload' from * 'requestMessage'. * @see #releaseMessage */ @Override protected Object handleRequestMessage(Message<?> requestMessage) { boolean delayed = requestMessage.getPayload() instanceof DelayedMessageWrapper; if (!delayed) { long delay = determineDelayForMessage(requestMessage); if (delay > 0) { releaseMessageAfterDelay(requestMessage, delay); return null; } } // no delay return delayed ? ((DelayedMessageWrapper) requestMessage.getPayload()).getOriginal() : requestMessage; }
/** * Used for reading persisted Messages in the 'messageStore' to reschedule them e.g. * upon application restart. The logic is based on iteration over * {@code messageGroup.getMessages()} and schedules task for 'delay' logic. This * behavior is dictated by the avoidance of invocation thread overload. */ @Override public synchronized void reschedulePersistedMessages() { MessageGroup messageGroup = this.messageStore.getMessageGroup(this.messageGroupId); for (final Message<?> message : messageGroup.getMessages()) { getTaskScheduler() .schedule(() -> { // This is fine to keep the reference to the message, // because the scheduled task is performed immediately. long delay = determineDelayForMessage(message); if (delay > 0) { releaseMessageAfterDelay(message, delay); } else { releaseMessage(message); } }, new Date()); } }
public final void handleMessage(final Message<?> message) { long delay = this.determineDelayForMessage(message); if (delay > 0) { this.releaseMessageAfterDelay(message, delay); } else { // no delay, release directly this.releaseMessage(message); } }
/** * Checks if 'requestMessage' wasn't delayed before ({@link #releaseMessageAfterDelay} * and {@link DelayHandler.DelayedMessageWrapper}). Than determine 'delay' for * 'requestMessage' ({@link #determineDelayForMessage}) and if {@code delay > 0} * schedules 'releaseMessage' task after 'delay'. * @param requestMessage - the Message which may be delayed. * @return - {@code null} if 'requestMessage' is delayed, otherwise - 'payload' from * 'requestMessage'. * @see #releaseMessage */ @Override protected Object handleRequestMessage(Message<?> requestMessage) { boolean delayed = requestMessage.getPayload() instanceof DelayedMessageWrapper; if (!delayed) { long delay = determineDelayForMessage(requestMessage); if (delay > 0) { releaseMessageAfterDelay(requestMessage, delay); return null; } } // no delay return delayed ? ((DelayedMessageWrapper) requestMessage.getPayload()).getOriginal() : requestMessage; }
/** * Used for reading persisted Messages in the 'messageStore' to reschedule them e.g. * upon application restart. The logic is based on iteration over * {@code messageGroup.getMessages()} and schedules task for 'delay' logic. This * behavior is dictated by the avoidance of invocation thread overload. */ @Override public synchronized void reschedulePersistedMessages() { MessageGroup messageGroup = this.messageStore.getMessageGroup(this.messageGroupId); for (final Message<?> message : messageGroup.getMessages()) { getTaskScheduler() .schedule(() -> { // This is fine to keep the reference to the message, // because the scheduled task is performed immediately. long delay = determineDelayForMessage(message); if (delay > 0) { releaseMessageAfterDelay(message, delay); } else { releaseMessage(message); } }, new Date()); } }