Class ConnectionFactoryUtils


  • public final class ConnectionFactoryUtils
    extends java.lang.Object
    Helper class for managing a Spring based Rabbit ConnectionFactory, in particular for obtaining transactional Rabbit resources for a given ConnectionFactory.

    Mainly for internal use within the framework. Used by RabbitTemplate as well as SimpleMessageListenerContainer.

    Author:
    Mark Fisher, Dave Syer, Gary Russell, Artem Bilan
    • Method Detail

      • isChannelTransactional

        public static boolean isChannelTransactional​(com.rabbitmq.client.Channel channel,
                                                     ConnectionFactory connectionFactory)
        Determine whether the given RabbitMQ Channel is transactional, that is, bound to the current thread by Spring's transaction facilities.
        Parameters:
        channel - the RabbitMQ Channel to check
        connectionFactory - the RabbitMQ ConnectionFactory that the Channel originated from
        Returns:
        whether the Channel is transactional
      • getTransactionalResourceHolder

        public static RabbitResourceHolder getTransactionalResourceHolder​(ConnectionFactory connectionFactory,
                                                                          boolean synchedLocalTransactionAllowed)
        Obtain a RabbitMQ Channel that is synchronized with the current transaction, if any.
        Parameters:
        connectionFactory - the ConnectionFactory to obtain a Channel for
        synchedLocalTransactionAllowed - whether to allow for a local RabbitMQ transaction that is synchronized with a Spring-managed transaction (where the main transaction might be a JDBC-based one for a specific DataSource, for example), with the RabbitMQ transaction committing right after the main transaction. If not allowed, the given ConnectionFactory needs to handle transaction enlistment underneath the covers.
        Returns:
        the transactional Channel, or null if none found
      • getTransactionalResourceHolder

        public static RabbitResourceHolder getTransactionalResourceHolder​(ConnectionFactory connectionFactory,
                                                                          boolean synchedLocalTransactionAllowed,
                                                                          boolean publisherConnectionIfPossible)
        Obtain a RabbitMQ Channel that is synchronized with the current transaction, if any.
        Parameters:
        connectionFactory - the ConnectionFactory to obtain a Channel for
        synchedLocalTransactionAllowed - whether to allow for a local RabbitMQ transaction that is synchronized with a Spring-managed transaction (where the main transaction might be a JDBC-based one for a specific DataSource, for example), with the RabbitMQ transaction committing right after the main transaction. If not allowed, the given ConnectionFactory needs to handle transaction enlistment underneath the covers.
        publisherConnectionIfPossible - obtain a connection from a separate publisher connection if possible.
        Returns:
        the transactional Channel, or null if none found
      • enableAfterCompletionFailureCapture

        public static void enableAfterCompletionFailureCapture​(boolean enable)
        Call this method to enable capturing AfterCompletionFailedExceptions when using transaction synchronization. Exceptions are stored in a ThreadLocal which must be cleared by calling checkAfterCompletion() after the transaction has completed.
        Parameters:
        enable - true to enable capture.
      • checkAfterCompletion

        public static void checkAfterCompletion()
        When using transaction synchronization, call this method after the transaction commits to verify that the RabbitMQ transaction committed.
        Throws:
        AfterCompletionFailedException - if synchronization failed.
        Since:
        2.3.10
      • registerDeliveryTag

        public static void registerDeliveryTag​(ConnectionFactory connectionFactory,
                                               com.rabbitmq.client.Channel channel,
                                               java.lang.Long tag)
      • createConnection

        public static Connection createConnection​(ConnectionFactory connectionFactory,
                                                  boolean publisherConnectionIfPossible)
        Create a connection with this connection factory and/or its publisher factory.
        Parameters:
        connectionFactory - the connection factory.
        publisherConnectionIfPossible - true to use the publisher factory, if present.
        Returns:
        the connection.
        Since:
        2.0.2