All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bq.lib.rabbitmq.config.AmqpConfigurer Maven / Gradle / Ivy

package com.bq.lib.rabbitmq.config;

import java.util.Map;
import java.util.Optional;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.function.Function;
import java.util.function.UnaryOperator;

import org.springframework.amqp.core.Binding.DestinationType;
import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.config.RetryInterceptorBuilder;
import org.springframework.amqp.rabbit.config.RetryInterceptorBuilder.StatelessRetryInterceptorBuilder;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.retry.RejectAndDontRequeueRecoverer;
import org.springframework.retry.interceptor.RetryOperationsInterceptor;
import org.springframework.util.ErrorHandler;

public interface AmqpConfigurer {

	TopicExchange topicExchange(String name, UnaryOperator modifier);

	default TopicExchange topicExchange(String name) {
		return topicExchange(name, null);
	}

	FanoutExchange fanoutExchange(String name, UnaryOperator modifier);

	default FanoutExchange fanoutExchange(String name) {
		return fanoutExchange(name, null);
	}

	UnaryOperator alternateExchange(final String name);

	default UnaryOperator alternateExchange(final Exchange alterExchange) {
		return alternateExchange(alterExchange.getName());
	}

	Queue queue(String name, Function modifier);

	default Queue queue(String name) {
		return queue(name, null);
	}

	void bind(final String exchangeName, final String destination, final DestinationType destinationType,
			Optional routingKey, Optional> arguments);

	default void bind(final String exchangeName, final Queue destination, Optional routingKey,
			Optional> arguments) {
		bind(exchangeName, destination.getName(), DestinationType.QUEUE, routingKey, arguments);
	}

	UnaryOperator setDeadLetterExchange(String exchangeName);

	default UnaryOperator setDeadLetterExchange(Exchange exchange) {
		return setDeadLetterExchange(exchange.getName());
	}

	SimpleMessageListenerContainer listenerContainer(Executor executor,
			UnaryOperator modifier, String... queueNames);

	default SimpleMessageListenerContainer listenerContainer(UnaryOperator modifier,
			String... queueNames) {
		return listenerContainer(Executors.newSingleThreadExecutor(), modifier, queueNames);
	}

	default SimpleMessageListenerContainer listenerContainer(String... queueNames) {
		return listenerContainer(Executors.newSingleThreadExecutor(), null, queueNames);
	}

	default SimpleMessageListenerContainer listenerContainer(Executor executor, String... queueNames) {
		return listenerContainer(executor, null, queueNames);
	}

	UnaryOperator setRetryOpertations(RetryOperationsInterceptor interceptor);

	UnaryOperator setErrorHandler(ErrorHandler errorHandler);

	default UnaryOperator setRetryOpertations(Optional maxAttempts,
			Optional backoffOptions) {
		StatelessRetryInterceptorBuilder builder = RetryInterceptorBuilder.stateless();
		if (maxAttempts.isPresent()) {
			builder.maxAttempts(maxAttempts.get());
		}
		if (backoffOptions.isPresent()) {
			BackoffOptions options = backoffOptions.get();
			builder.backOffOptions(options.getInitialInterval(), options.getMultiplier(), options.getMaxInterval());
		}
		builder.recoverer(new RejectAndDontRequeueRecoverer());
		return setRetryOpertations(builder.build());
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy