Example usage for io.vertx.core.eventbus MessageConsumer endHandler

List of usage examples for io.vertx.core.eventbus MessageConsumer endHandler

Introduction

In this page you can find the example usage for io.vertx.core.eventbus MessageConsumer endHandler.

Prototype

@Override
    MessageConsumer<T> endHandler(Handler<Void> endHandler);

Source Link

Usage

From source file:co.runrightfast.vertx.core.RunRightFastVerticle.java

License:Apache License

/**
 *
 * @param <REQ>/*ww  w  .j a v  a  2 s. c  o  m*/
 * @param <RESP>
 * @param config
 * @return MessageConsumer
 */
protected <REQ extends Message, RESP extends Message> MessageConsumerRegistration<REQ, RESP> registerMessageConsumer(
        @NonNull final MessageConsumerConfig<REQ, RESP> config) {
    Preconditions.checkState(
            !messageConsumerRegistrations.containsKey(config.getAddressMessageMapping().getAddress()));
    final EventBus eventBus = vertx.eventBus();
    registerMessageCodecs(config);

    final String address = config.getAddressMessageMapping().getAddress();
    final MessageConsumer<REQ> consumer = config.isLocal() ? eventBus.localConsumer(address)
            : eventBus.consumer(address);
    consumer.completionHandler(config.getCompletionHandler()
            .map(handler -> messageConsumerCompletionHandler(address, Optional.of(handler), config))
            .orElseGet(() -> messageConsumerCompletionHandler(address, Optional.empty(), config)));
    consumer.endHandler(config.getEndHandler()
            .map(handler -> messageConsumerEndHandler(address, Optional.of(handler), config))
            .orElseGet(() -> messageConsumerEndHandler(address, Optional.empty(), config)));
    config.getExceptionHandler().ifPresent(consumer::exceptionHandler);
    consumer.handler(messageConsumerHandler(config));

    final String processSpecificAddress = config.getAddressMessageMapping().getProcessSpecificAddress();
    final MessageConsumer<REQ> processSpecificConsumer = config.isLocal()
            ? eventBus.localConsumer(processSpecificAddress)
            : eventBus.consumer(processSpecificAddress);
    processSpecificConsumer.completionHandler(config.getCompletionHandler().map(
            handler -> messageConsumerCompletionHandler(processSpecificAddress, Optional.of(handler), config))
            .orElseGet(
                    () -> messageConsumerCompletionHandler(processSpecificAddress, Optional.empty(), config)));
    processSpecificConsumer.endHandler(config.getEndHandler()
            .map(handler -> messageConsumerEndHandler(processSpecificAddress, Optional.of(handler), config))
            .orElseGet(() -> messageConsumerEndHandler(processSpecificAddress, Optional.empty(), config)));
    config.getExceptionHandler().ifPresent(processSpecificConsumer::exceptionHandler);
    processSpecificConsumer.handler(messageConsumerHandler(config));

    final MessageConsumerRegistration<REQ, RESP> messageConsumerRegistration = MessageConsumerRegistration
            .<REQ, RESP>builder().messageConsumer(consumer)
            .processSpecificMessageConsumer(processSpecificConsumer).config(config).build();
    messageConsumerRegistrations = ImmutableMap.<String, MessageConsumerRegistration<?, ?>>builder()
            .putAll(messageConsumerRegistrations).put(config.address(), messageConsumerRegistration).build();
    return messageConsumerRegistration;
}