@Override
    public void swapState(Routable rhs) {
        super.swapState(rhs);
        if (rhs instanceof Message) {
            Message msg = (Message)rhs;

            Route route = this.route;
            this.route = msg.route;
            msg.route = route;

            boolean retryEnabled = this.retryEnabled;
            this.retryEnabled = msg.retryEnabled;
            msg.retryEnabled = retryEnabled;

            int retry = this.retry;
            this.retry = msg.retry;
            msg.retry = retry;

            long timeReceived = this.timeReceived;
            this.timeReceived = msg.timeReceived;
            msg.timeReceived = timeReceived;

            long timeRemaining = this.timeRemaining;
            this.timeRemaining = msg.timeRemaining;
            msg.timeRemaining = timeRemaining;
        }
    }
A message is a child of Routable, it is not a reply, and it has a sequencing identifier. Furthermore, a message
contains a retry counter that holds what retry the message is currently on. See the method comment {@link #getRetry}
for more information.

@author Simon Thoresen Hult
messagebus/src/main/java/com/yahoo/messagebus/Message.java