Search in sources :

Example 1 with MessageDecorator

use of org.springframework.integration.support.MessageDecorator in project spring-integration by spring-projects.

the class BroadcastingDispatcher method dispatch.

@Override
public boolean dispatch(Message<?> message) {
    int dispatched = 0;
    int sequenceNumber = 1;
    Collection<MessageHandler> handlers = this.getHandlers();
    if (this.requireSubscribers && handlers.size() == 0) {
        throw new MessageDispatchingException(message, "Dispatcher has no subscribers");
    }
    int sequenceSize = handlers.size();
    Message<?> messageToSend = message;
    UUID sequenceId = null;
    if (this.applySequence) {
        sequenceId = message.getHeaders().getId();
    }
    for (MessageHandler handler : handlers) {
        if (this.applySequence) {
            messageToSend = getMessageBuilderFactory().fromMessage(message).pushSequenceDetails(sequenceId, sequenceNumber++, sequenceSize).build();
            if (message instanceof MessageDecorator) {
                messageToSend = ((MessageDecorator) message).decorateMessage(messageToSend);
            }
        }
        if (this.executor != null) {
            Runnable task = createMessageHandlingTask(handler, messageToSend);
            this.executor.execute(task);
            dispatched++;
        } else {
            if (this.invokeHandler(handler, messageToSend)) {
                dispatched++;
            }
        }
    }
    if (dispatched == 0 && this.minSubscribers == 0 && logger.isDebugEnabled()) {
        if (sequenceSize > 0) {
            logger.debug("No subscribers received message, default behavior is ignore");
        } else {
            logger.debug("No subscribers, default behavior is ignore");
        }
    }
    return dispatched >= this.minSubscribers;
}
Also used : MessageDecorator(org.springframework.integration.support.MessageDecorator) MessageHandler(org.springframework.messaging.MessageHandler) MessageHandlingRunnable(org.springframework.messaging.support.MessageHandlingRunnable) UUID(java.util.UUID) MessageDispatchingException(org.springframework.integration.MessageDispatchingException)

Aggregations

UUID (java.util.UUID)1 MessageDispatchingException (org.springframework.integration.MessageDispatchingException)1 MessageDecorator (org.springframework.integration.support.MessageDecorator)1 MessageHandler (org.springframework.messaging.MessageHandler)1 MessageHandlingRunnable (org.springframework.messaging.support.MessageHandlingRunnable)1