重写

2015-11-03 41 views
1

我们使用的是Spring AMQP客户端连接到我们的RabbitMQs和我们的Spring配置定义为重写

<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指向默认org.springframework.amqp.rabbit.connection.CachingConnectionFactory实现到基本的Java客户端实现ConnectionFactory。当我调试我的代码,我看到是自动装配ConnectionFactory是(org.springframework.amqp.rabbit.connectionCachingConnectionFactory)

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

+0

您是否使用Spring Boot? –

+0

不,只有spring-amqp – user3221681

回答

0

为什么你需要这样做?如果直接使用本地连接工厂,则不会获得Spring提供的功能,那么为什么要使用Spring呢?

这就是说,只要你用正确的类型声明自动装配的变量,你就可以注入本地连接工厂。

使用Spring的本地客户端自动恢复没有任何好处; Spring AMQP拥有(并始终拥有)自己的恢复机制,它早于amqp客户端恢复。

+0

谢谢Gary,我编辑了上面的帖子,因为配置中没有显示 user3221681

+0

目前还不清楚你想要做什么。是的,可以在CCF中注入一个定制的本地工厂,但本地的'autorecovery'不能为Spring AMQP带来好处;我更充分地解释了原因[这里](http://stackoverflow.com/questions/33511868/notifying-channel-shutdown-to-classes-implementing-the-org-springframework-amqp/33523403#33523403)。 –

0

Spring无法将com.rabbitmq.client.ConnectionFactory自动装入声明为org.springframework.amqp.rabbit.connection.ConnectionFactory(或相反方式)的字段中 - 两者不具有类型兼容性。您需要使用正确的类型声明要自动装入的字段,并且应该获得所需的内容。

也许你打算宣布该字段为com.rabbitmq.client.ConnectionFactory,但你错误地得到了Spring类型 - 检查你的导入。