Class RabbitConnectionFactoryBean

java.lang.Object
org.springframework.beans.factory.config.AbstractFactoryBean<com.rabbitmq.client.ConnectionFactory>
org.springframework.amqp.rabbit.connection.RabbitConnectionFactoryBean
All Implemented Interfaces:
Aware, BeanClassLoaderAware, BeanFactoryAware, DisposableBean, FactoryBean<com.rabbitmq.client.ConnectionFactory>, InitializingBean

public class RabbitConnectionFactoryBean extends AbstractFactoryBean<com.rabbitmq.client.ConnectionFactory>
Factory bean to create a RabbitMQ ConnectionFactory, delegating most setter methods and optionally enabling SSL, with or without certificate validation. When sslPropertiesLocation is not null, the default implementation loads a PKCS12 keystore and a JKS truststore using the supplied properties and intializes key and trust manager factories, using algorithm SunX509 by default. These are then used to initialize an SSLContext using the sslAlgorithm (default TLSv1.2, falling back to TLSv1.1, if 1.2 is not available).

Override createSSLContext() to create and/or perform further modification of the context.

Override setUpSSL() to take complete control over setting up SSL.

Since:
1.4
Author:
Gary Russell, Heath Abelson, Arnaud Cogoluègnes, Hareendran, Dominique Villard, Zachary DeLuca
  • Field Details

    • connectionFactory

      protected final com.rabbitmq.client.ConnectionFactory connectionFactory
  • Constructor Details

    • RabbitConnectionFactoryBean

      public RabbitConnectionFactoryBean()
  • Method Details

    • isSkipServerCertificateValidation

      public boolean isSkipServerCertificateValidation()
      Whether or not Server Side certificate has to be validated or not.
      Returns:
      true if Server Side certificate has to be skipped
      Since:
      1.6.6
    • setSkipServerCertificateValidation

      public void setSkipServerCertificateValidation(boolean skipServerCertificateValidation)
      Whether or not Server Side certificate has to be validated or not. This would be used if useSSL is set to true and should only be used on dev or Qa regions skipServerCertificateValidation should never be set to true in production
      Parameters:
      skipServerCertificateValidation - Flag to override Server side certificate checks; if set to true TrustEverythingTrustManager would be used.
      Since:
      1.6.6
      See Also:
      • TrustEverythingTrustManager
    • setUseSSL

      public void setUseSSL(boolean useSSL)
      Whether or not the factory should be configured to use SSL.
      Parameters:
      useSSL - true to use SSL.
    • isUseSSL

      protected boolean isUseSSL()
      Returns:
      true to use ssl.
      Since:
      1.4.4.
    • setSslAlgorithm

      public void setSslAlgorithm(String sslAlgorithm)
      Set the algorithm to use; default TLSv1.1.
      Parameters:
      sslAlgorithm - the algorithm.
    • getSslAlgorithm

      protected String getSslAlgorithm()
      Returns:
      the ssl algorithm.
      Since:
      1.4.4
    • setSslPropertiesLocation

      public void setSslPropertiesLocation(Resource sslPropertiesLocation)
      When setUseSSL(boolean) is true, the SSL properties to use (optional). Resource referencing a properties file with the following properties:
      • keyStore=file:/secret/keycert.p12
      • trustStore=file:/secret/trustStore
      • keyStore.passPhrase=secret
      • trustStore.passPhrase=secret

      If this is provided, its properties (if present) will override the explicitly set property in this bean.

      Parameters:
      sslPropertiesLocation - the Resource to the ssl properties
    • getSslPropertiesLocation

      protected Resource getSslPropertiesLocation()
      Returns:
      the properties location.
      Since:
      1.4.4
    • getKeyStore

      protected String getKeyStore()
      Returns:
      the key store resource.
      Since:
      1.5
    • setKeyStore

      public void setKeyStore(String keyStore)
      Set the key store resource (e.g. file:/foo/keystore) - overrides the property in setSslPropertiesLocation(Resource). Ignored if setTrustStoreResource(Resource) is called with a resource.
      Parameters:
      keyStore - the keystore resource.
      Since:
      1.5
    • getKeyStoreResource

      protected Resource getKeyStoreResource()
    • setKeyStoreResource

      public void setKeyStoreResource(Resource keyStoreResource)
      Set a Resource pointing to the key store.
      Parameters:
      keyStoreResource - the resource.
      Since:
      1.6.4
    • getTrustStore

      protected String getTrustStore()
      Returns:
      the trust store resource.
      Since:
      1.5
    • setTrustStore

      public void setTrustStore(String trustStore)
      Set the key store resource (e.g. file:/foo/truststore) - overrides the property in setSslPropertiesLocation(Resource). Ignored if setTrustStoreResource(Resource) is called with a resource.
      Parameters:
      trustStore - the truststore resource.
      Since:
      1.5
    • getTrustStoreResource

      protected Resource getTrustStoreResource()
    • setTrustStoreResource

      public void setTrustStoreResource(Resource trustStoreResource)
      Set a Resource pointing to the trust store.
      Parameters:
      trustStoreResource - the resource.
      Since:
      1.6.4
    • getKeyStorePassphrase

      protected String getKeyStorePassphrase()
      Returns:
      the key store pass phrase.
      Since:
      1.5
    • setKeyStorePassphrase

      public void setKeyStorePassphrase(String keyStorePassphrase)
      Set the key store pass phrase - overrides the property in setSslPropertiesLocation(Resource).
      Parameters:
      keyStorePassphrase - the key store pass phrase.
      Since:
      1.5
    • getTrustStorePassphrase

      protected String getTrustStorePassphrase()
      Returns:
      the trust store pass phrase.
      Since:
      1.5
    • setTrustStorePassphrase

      public void setTrustStorePassphrase(String trustStorePassphrase)
      Set the trust store pass phrase - overrides the property in setSslPropertiesLocation(Resource).
      Parameters:
      trustStorePassphrase - the trust store pass phrase.
      Since:
      1.5
    • getKeyStoreType

      protected String getKeyStoreType()
      Get the key store type - this defaults to PKCS12 if not overridden by setSslPropertiesLocation(Resource) or setKeyStoreType(java.lang.String).
      Returns:
      the key store type.
      Since:
      1.6.2
    • setKeyStoreType

      public void setKeyStoreType(String keyStoreType)
      Set the key store type - overrides the property in setSslPropertiesLocation(Resource).
      Parameters:
      keyStoreType - the key store type.
      Since:
      1.6.2
      See Also:
    • getTrustStoreType

      protected String getTrustStoreType()
      Get the trust store type - this defaults to JKS if not overridden by setSslPropertiesLocation(Resource) or setTrustStoreType(java.lang.String).
      Returns:
      the trust store type.
      Since:
      1.6.2
    • setTrustStoreType

      public void setTrustStoreType(String trustStoreType)
      Set the trust store type - overrides the property in setSslPropertiesLocation(Resource).
      Parameters:
      trustStoreType - the trust store type.
      Since:
      1.6.2
      See Also:
    • getSecureRandom

      protected SecureRandom getSecureRandom()
    • setSecureRandom

      public void setSecureRandom(SecureRandom secureRandom)
      Set the secure random to use when initializing the SSLContext. Defaults to null, in which case the default implementation is used.
      Parameters:
      secureRandom - the secure random.
      Since:
      1.6.4
      See Also:
    • setHost

      public void setHost(String host)
      Parameters:
      host - the host.
      See Also:
      • ConnectionFactory.setHost(java.lang.String)
    • setPort

      public void setPort(int port)
      Parameters:
      port - the port.
      See Also:
      • ConnectionFactory.setPort(int)
    • setUsername

      public void setUsername(String username)
      Parameters:
      username - the user name.
      See Also:
      • ConnectionFactory.setUsername(java.lang.String)
    • setPassword

      public void setPassword(String password)
      Parameters:
      password - the password.
      See Also:
      • ConnectionFactory.setPassword(java.lang.String)
    • setCredentialsProvider

      public void setCredentialsProvider(com.rabbitmq.client.impl.CredentialsProvider provider)
      Set a credentials provider (e.g. OAUTH2).
      Parameters:
      provider - the provider.
      Since:
      2.3
    • setCredentialsRefreshService

      public void setCredentialsRefreshService(com.rabbitmq.client.impl.CredentialsRefreshService service)
      Set a refresh service.
      Parameters:
      service - the service.
      Since:
      2.3
    • setVirtualHost

      public void setVirtualHost(String virtualHost)
      Parameters:
      virtualHost - the virtual host.
      See Also:
      • ConnectionFactory.setVirtualHost(java.lang.String)
    • setUri

      public void setUri(URI uri)
      Parameters:
      uri - the uri.
      See Also:
      • ConnectionFactory.setUri(java.net.URI)
    • setUri

      public void setUri(String uriString)
      Parameters:
      uriString - the uri.
      See Also:
      • ConnectionFactory.setUri(java.lang.String)
    • setRequestedChannelMax

      public void setRequestedChannelMax(int requestedChannelMax)
      Parameters:
      requestedChannelMax - the max requested channels.
      See Also:
      • ConnectionFactory.setRequestedChannelMax(int)
    • setRequestedFrameMax

      public void setRequestedFrameMax(int requestedFrameMax)
      Parameters:
      requestedFrameMax - the requested max frames.
      See Also:
      • ConnectionFactory.setRequestedFrameMax(int)
    • setConnectionTimeout

      public void setConnectionTimeout(int connectionTimeout)
      Parameters:
      connectionTimeout - the connection timeout.
      See Also:
      • ConnectionFactory.setConnectionTimeout(int)
    • setRequestedHeartbeat

      public void setRequestedHeartbeat(int requestedHeartbeat)
      Parameters:
      requestedHeartbeat - the requested heartbeat.
      See Also:
      • ConnectionFactory.setRequestedHeartbeat(int)
    • setClientProperties

      public void setClientProperties(Map<String,Object> clientProperties)
      Add custom client properties.
      Parameters:
      clientProperties - the client properties.
      See Also:
      • ConnectionFactory.setClientProperties(java.util.Map)
    • setSaslConfig

      public void setSaslConfig(com.rabbitmq.client.SaslConfig saslConfig)
      Parameters:
      saslConfig - the sasl config.
      See Also:
      • ConnectionFactory.setSaslConfig(com.rabbitmq.client.SaslConfig)
    • setSocketFactory

      public void setSocketFactory(SocketFactory factory)
      Parameters:
      factory - the socket factory.
      See Also:
      • ConnectionFactory.setSocketFactory(javax.net.SocketFactory)
    • setSocketConfigurator

      public void setSocketConfigurator(com.rabbitmq.client.SocketConfigurator socketConfigurator)
      Parameters:
      socketConfigurator - the socket configurator.
      See Also:
      • ConnectionFactory.setSocketConfigurator(com.rabbitmq.client.SocketConfigurator)
    • setSharedExecutor

      public void setSharedExecutor(ExecutorService executor)
      Parameters:
      executor - the executor service
      See Also:
      • ConnectionFactory.setSharedExecutor(java.util.concurrent.ExecutorService)
    • setThreadFactory

      public void setThreadFactory(ThreadFactory threadFactory)
      Parameters:
      threadFactory - the thread factory.
      See Also:
      • ConnectionFactory.setThreadFactory(java.util.concurrent.ThreadFactory)
    • setExceptionHandler

      public void setExceptionHandler(com.rabbitmq.client.ExceptionHandler exceptionHandler)
      Parameters:
      exceptionHandler - the exception handler.
      See Also:
      • ConnectionFactory.setExceptionHandler(com.rabbitmq.client.ExceptionHandler)
    • setUseNio

      public void setUseNio(boolean useNio)
      Whether or not the factory should be configured to use Java NIO.
      Parameters:
      useNio - true to use Java NIO, false to use blocking IO
      See Also:
      • ConnectionFactory.useNio()
    • setNioParams

      public void setNioParams(com.rabbitmq.client.impl.nio.NioParams nioParams)
      Parameters:
      nioParams - the NIO parameters
      See Also:
      • ConnectionFactory.setNioParams(com.rabbitmq.client.impl.nio.NioParams)
    • setMetricsCollector

      public void setMetricsCollector(com.rabbitmq.client.MetricsCollector metricsCollector)
      Parameters:
      metricsCollector - the metrics collector instance
      See Also:
      • ConnectionFactory.setMetricsCollector(MetricsCollector)
    • setAutomaticRecoveryEnabled

      public void setAutomaticRecoveryEnabled(boolean automaticRecoveryEnabled)
      Set to true to enable amqp-client automatic recovery. Note: Spring AMQP implements its own connection recovery and this is generally not needed.
      Parameters:
      automaticRecoveryEnabled - true to enable.
      Since:
      1.7.1
    • setTopologyRecoveryEnabled

      public void setTopologyRecoveryEnabled(boolean topologyRecoveryEnabled)
      Set to true to enable amqp-client topology recovery. Note: if there is a Rabbit admin in the application context, Spring AMQP implements its own recovery and this is generally not needed.
      Parameters:
      topologyRecoveryEnabled - true to enable.
      Since:
      1.7.1
    • setChannelRpcTimeout

      public void setChannelRpcTimeout(int channelRpcTimeout)
      Parameters:
      channelRpcTimeout - continuation timeout for RPC calls in channels
      Since:
      2.0
      See Also:
      • ConnectionFactory.setChannelRpcTimeout(int)
    • setEnableHostnameVerification

      public void setEnableHostnameVerification(boolean enable)
      Enable server hostname verification for TLS connections.

      This enables hostname verification regardless of the IO mode used (blocking or non-blocking IO).

      This can be called typically after setting the SSLContext with one of the useSslProtocol methods. Requires amqp-client 5.4.0 or later.

      Parameters:
      enable - false to disable.
      Since:
      2.0.6
      See Also:
      • ConnectionFactory.enableHostnameVerification()
    • setMaxInboundMessageBodySize

      public void setMaxInboundMessageBodySize(int maxInboundMessageBodySize)
      Set the maximum body size of inbound (received) messages in bytes.
      Parameters:
      maxInboundMessageBodySize - the maximum size.
      Since:
      2.4.15
      See Also:
      • ConnectionFactory.setMaxInboundMessageBodySize(int)
    • getKeyStoreAlgorithm

      protected String getKeyStoreAlgorithm()
    • setKeyStoreAlgorithm

      public void setKeyStoreAlgorithm(String keyStoreAlgorithm)
      Set the algorithm used when creating the key store, default SunX509.
      Parameters:
      keyStoreAlgorithm - the algorithm.
      Since:
      2.1.6
    • getTrustStoreAlgorithm

      protected String getTrustStoreAlgorithm()
    • setTrustStoreAlgorithm

      public void setTrustStoreAlgorithm(String trustStoreAlgorithm)
      Set the algorithm used when creating the trust store, default SunX509.
      Parameters:
      trustStoreAlgorithm - the algorithm.
      Since:
      2.1.6
    • getResourceLoader

      protected ResourceLoader getResourceLoader()
      Get the resource loader; used to resolve the key store and trust store Resources to input streams.
      Returns:
      the resource loader.
      Since:
      2.3
    • setResourceLoader

      public void setResourceLoader(ResourceLoader resourceLoader)
      Set the resource loader; used to resolve the key store and trust store Resources to input streams.
      Parameters:
      resourceLoader - the resource loader.
      Since:
      2.3
    • getRabbitConnectionFactory

      public com.rabbitmq.client.ConnectionFactory getRabbitConnectionFactory()
      Access the connection factory to set any other properties not supported by this factory bean.
      Returns:
      the connection factory.
      Since:
      1.7.14
    • afterPropertiesSet

      public void afterPropertiesSet()
      Specified by:
      afterPropertiesSet in interface InitializingBean
      Overrides:
      afterPropertiesSet in class AbstractFactoryBean<com.rabbitmq.client.ConnectionFactory>
    • getObjectType

      public Class<?> getObjectType()
      Specified by:
      getObjectType in interface FactoryBean<com.rabbitmq.client.ConnectionFactory>
      Specified by:
      getObjectType in class AbstractFactoryBean<com.rabbitmq.client.ConnectionFactory>
    • createInstance

      protected com.rabbitmq.client.ConnectionFactory createInstance()
      Specified by:
      createInstance in class AbstractFactoryBean<com.rabbitmq.client.ConnectionFactory>
    • setUpSSL

      protected void setUpSSL()
      Override this method to take complete control over the SSL setup.
      Since:
      1.4.4
    • configureKeyManagers

      Throws:
      KeyStoreException
      IOException
      NoSuchAlgorithmException
      CertificateException
      UnrecoverableKeyException
    • configureTrustManagers

      Throws:
      KeyStoreException
      IOException
      NoSuchAlgorithmException
      CertificateException
    • createSSLContext

      protected SSLContext createSSLContext() throws NoSuchAlgorithmException
      Override this method to create and/or configure the SSLContext used by the ConnectionFactory.
      Returns:
      The SSLContext.
      Throws:
      NoSuchAlgorithmException - if the algorithm is not available.
      Since:
      1.4.4