Class ConnectionFactoryUtils

java.lang.Object
org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils

public final class ConnectionFactoryUtils extends 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 Details

    • 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
    • releaseResources

      public static void releaseResources(@Nullable RabbitResourceHolder resourceHolder)
    • bindResourceToTransaction

      public static RabbitResourceHolder bindResourceToTransaction(RabbitResourceHolder resourceHolder, ConnectionFactory connectionFactory, boolean synched)
    • 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, 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