覆盖默认的org.springframework.amqp.rabbit.connection.CachingConnectionFactory实现

时间:2015-11-03 19:24:45

标签: java spring spring-amqp

我们使用Spring AMQP客户端连接到我们的RabbitMQs,我们的Spring Config定义为

 <bean id="nativeCF" class="com.rabbitmq.client.ConnectionFactory" p:connection-timeout="#{msgProps['messaging.amqp.connection.timeout.millis']?:30000}"
  p:socket-factory-ref="rabbitSslSocketFactory" p:automatic-recovery-enabled="true" p:topologyRecoveryEnabled="false"/>

<rabbit:connection-factory id="connectionFactory" host="#{msgProps['messaging.amqp.host']}"
  username="#{msgProps['messaging.amqp.username']}" password="#{propertyEncryptor.decrypt(msgProps['messaging.amqp.password'])}"
  port="#{msgProps['messaging.amqp.port']}" requested-heartbeat="#{msgProps['messaging.amqp.heartbeat']?:600}"
  channel-cache-size="#{msgProps['messaging.amqp.channel.cache.size']?:150}" connection-factory="nativeCF"/>
  • nativeCF指向基本的Java客户端实现ConnectionFactory。当我调试我的代码时,我发现自动连接的connectionFactory是(org.springframework.amqp.rabbit.connectionCachingConnectionFactory)

我想覆盖amqp.rabbit.CachingConnectionFactory并在配置中自动装配它。 想知道如何继续。

2 个答案:

答案 0 :(得分:0)

为什么你需要这样做?如果你直接使用本机连接工厂,你将无法获得Spring提供的功能,那么为什么要使用Spring呢?

也就是说,只要您使用正确的类型声明自动变量变量,就可以注入原生连接工厂。

使用Spring的本机客户端自动恢复没有任何好处; Spring AMQP已经(并且一直有)自己的恢复机制,早于amqp-client恢复。

答案 1 :(得分:0)

Spring无法将com.rabbitmq.client.ConnectionFactory自动装入声明为org.springframework.amqp.rabbit.connection.ConnectionFactory的字段(或其他方式) - 这两个字段不兼容。您需要使用正确的类型声明要自动装配的字段,您应该得到您想要的。

也许您打算将该字段声明为com.rabbitmq.client.ConnectionFactory但是您错误地获得了Spring类型 - 请检查您的导入。