@Override public void send(Message<?> message) { SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.wrap(message); String destination = headers.getDestination(); destination = (destination != null) ? destination : getRequiredDefaultDestination(); doSend(destination, message); }
@Override public SimpMessageTypeMessageCondition getMatchingCondition(Message<?> message) { Object actualMessageType = SimpMessageHeaderAccessor.getMessageType(message.getHeaders()); if (actualMessageType == null) { return null; } return this; }
@Override protected void doSend(String destination, Message<?> message) { Assert.notNull(destination, "Destination must not be null"); SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.wrap(message); headers.setDestination(destination); headers.setMessageTypeIfNotSet(SimpMessageType.MESSAGE); message = MessageBuilder.withPayload(message.getPayload()).setHeaders(headers).build(); long timeout = this.sendTimeout; boolean sent = (timeout >= 0) ? this.messageChannel.send(message, timeout) : this.messageChannel.send(message); if (!sent) { throw new MessageDeliveryException( message, "failed to send message to destination '" + destination + "' within timeout: " + timeout); } }
@Override public int compareTo(SimpMessageTypeMessageCondition other, Message<?> message) { Object actualMessageType = SimpMessageHeaderAccessor.getMessageType(message.getHeaders()); if (actualMessageType != null) { if (actualMessageType.equals(this.getMessageType()) && actualMessageType.equals(other.getMessageType())) { return 0; } else if (actualMessageType.equals(this.getMessageType())) { return -1; } else if (actualMessageType.equals(other.getMessageType())) { return 1; } } return 0; }