boolean scheduleRetry(RoutingNode node) {
        Message msg = node.getMessage();
        if (!msg.getRetryEnabled()) {
            return false;
        }
        int retry = msg.getRetry() + 1;
        double delay = node.getReply().getRetryDelay();
        if (delay < 0) {
            delay = retryPolicy.getRetryDelay(retry);
        }
        if (msg.getTimeRemainingNow() * 0.001 - delay <= 0) {
            node.addError(ErrorCode.TIMEOUT, "Timeout exceeded by resender, giving up.");
            return false;
        }
        synchronized (monitor) {
            if (destroyed) return false;
            node.prepareForRetry(); // consumes the reply
            node.getTrace().trace(TraceLevel.COMPONENT,
                    "Message scheduled for retry " + retry + " in " + delay + " seconds.");
            msg.setRetry(retry);
            queue.add(new Entry(node, SystemTimer.INSTANCE.milliTime() + (long) (delay * 1000)));
        }
        return true;
    }
Schedules the given node for resending, if enabled. This will invoke {@link com.yahoo.messagebus.routing.RoutingNode#prepareForRetry()}
if the node was queued. This method is NOT thread-safe, and should only be called by the messenger thread.

@param node  The node to resend.
@return True if the node was queued.
messagebus/src/main/java/com/yahoo/messagebus/routing/Resender.java