Spring boot 如何设置主兔子模板和兔子连接工厂
我在一个spring引导项目中遇到了一些错误,我正在使用spring集成连接到RabbitMQ。我正在XML文件中对RabbitMQ进行如下配置:Spring boot 如何设置主兔子模板和兔子连接工厂,spring-boot,spring-integration,spring-cloud,spring-rabbit,zipkin,Spring Boot,Spring Integration,Spring Cloud,Spring Rabbit,Zipkin,我在一个spring引导项目中遇到了一些错误,我正在使用spring集成连接到RabbitMQ。我正在XML文件中对RabbitMQ进行如下配置: <!-- RabbitMQ configuration --> <rabbit:connection-factory id="rabbitConnectionFactory_2" host="${queuing.events.host}" port="${queuing.events.
<!-- RabbitMQ configuration -->
<rabbit:connection-factory
id="rabbitConnectionFactory_2"
host="${queuing.events.host}"
port="${queuing.events.port}"
username="${queuing.events.username}"
password="${queuing.events.password}"
virtual-host="${queuing.events.virtual-host}"
publisher-returns="true"/>
<rabbit:template id="amqpTemplate_2" connection-factory="rabbitConnectionFactory_2" />
<rabbit:admin id="rabbitAdmin_2" connection-factory="rabbitConnectionFactory_2"/>
<rabbit:listener-container connection-factory="rabbitConnectionFactory_2" auto-startup="true" requeue-rejected="false" />
<bean id="rabbitListenerContainerFactory_2" class="org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory">
<property name="connectionFactory" ref="rabbitConnectionFactory_2"/>
</bean>
<!-- -->
<!-- Here the primary connection -->
<bean id="rabbitConnectionFactory" primary="true" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
<constructor-arg value="${spring.rabbitmq.host}"/>
<property name="username" value="${spring.rabbitmq.username}"/>
<property name="password" value="${spring.rabbitmq.password}"/>
<property name="virtualHost" value="${spring.rabbitmq.virtual-host}"/>
</bean>
<!-- RabbitMQ configuration -->
<rabbit:connection-factory
id="rabbitConnectionFactory_2"
host="${queuing.events.host}"
port="${queuing.events.port}"
username="${queuing.events.username}"
password="${queuing.events.password}"
virtual-host="${queuing.events.virtual-host}"
publisher-returns="true"/>
<rabbit:template id="amqpTemplate_2" connection-factory="rabbitConnectionFactory_2" />
<rabbit:admin id="rabbitAdmin_2" connection-factory="rabbitConnectionFactory_2"/>
<rabbit:listener-container connection-factory="rabbitConnectionFactory_2" auto-startup="true" requeue-rejected="false" />
<bean id="rabbitListenerContainerFactory_2" class="org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory">
<property name="connectionFactory" ref="rabbitConnectionFactory_2"/>
</bean>
而错误是由于这种依赖关系而产生的:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
如果删除此依赖项,则不会出现错误
您可以找到一个示例项目来重现此场景。在pom文件中,您将看到以下内容:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR2</spring-cloud.version> <!-- it works with this version-->
<!-- <spring-cloud.version>Edgware.RELEASE</spring-cloud.version> --> <!-- doesn't work with this version-->
</properties>
<dependencies>
<!-- SPRING BOOT -->
<!-- it fails because of this dependency in that we are using Edgware.RELEASE version -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
...
因此,我需要知道如何为RabbitMQ设置主配置,此外,我认为这可能是一个问题,因为只有在使用此版本Edgware.RELEASE时才会出现此错误
我遗漏了什么吗?fran,在Edgware.RELEASE中,spring cloud sleuth zipkin将解析zipkin 2依赖项尝试使用spring cloud starter zipkin legacy来代替要在XML文件中定义RabbitMQ的主连接工厂,您可以执行以下操作:
<!-- RabbitMQ configuration -->
<rabbit:connection-factory
id="rabbitConnectionFactory_2"
host="${queuing.events.host}"
port="${queuing.events.port}"
username="${queuing.events.username}"
password="${queuing.events.password}"
virtual-host="${queuing.events.virtual-host}"
publisher-returns="true"/>
<rabbit:template id="amqpTemplate_2" connection-factory="rabbitConnectionFactory_2" />
<rabbit:admin id="rabbitAdmin_2" connection-factory="rabbitConnectionFactory_2"/>
<rabbit:listener-container connection-factory="rabbitConnectionFactory_2" auto-startup="true" requeue-rejected="false" />
<bean id="rabbitListenerContainerFactory_2" class="org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory">
<property name="connectionFactory" ref="rabbitConnectionFactory_2"/>
</bean>
<!-- -->
<!-- Here the primary connection -->
<bean id="rabbitConnectionFactory" primary="true" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
<constructor-arg value="${spring.rabbitmq.host}"/>
<property name="username" value="${spring.rabbitmq.username}"/>
<property name="password" value="${spring.rabbitmq.password}"/>
<property name="virtualHost" value="${spring.rabbitmq.virtual-host}"/>
</bean>
<!-- RabbitMQ configuration -->
<rabbit:connection-factory
id="rabbitConnectionFactory_2"
host="${queuing.events.host}"
port="${queuing.events.port}"
username="${queuing.events.username}"
password="${queuing.events.password}"
virtual-host="${queuing.events.virtual-host}"
publisher-returns="true"/>
<rabbit:template id="amqpTemplate_2" connection-factory="rabbitConnectionFactory_2" />
<rabbit:admin id="rabbitAdmin_2" connection-factory="rabbitConnectionFactory_2"/>
<rabbit:listener-container connection-factory="rabbitConnectionFactory_2" auto-startup="true" requeue-rejected="false" />
<bean id="rabbitListenerContainerFactory_2" class="org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory">
<property name="connectionFactory" ref="rabbitConnectionFactory_2"/>
</bean>
哈坦,这个改变解决了我面临的错误,非常感谢!但我仍然想知道如何在XML文件中为RabbitMQ定义@Primary配置。
<!-- Here the primary connection -->
<bean id="rabbitConnectionFactory" primary="true" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
<constructor-arg value="${spring.rabbitmq.host}"/>
<property name="username" value="${spring.rabbitmq.username}"/>
<property name="password" value="${spring.rabbitmq.password}"/>
<property name="virtualHost" value="${spring.rabbitmq.virtual-host}"/>
</bean>
<!-- RabbitMQ configuration -->
<rabbit:connection-factory
id="rabbitConnectionFactory_2"
host="${queuing.events.host}"
port="${queuing.events.port}"
username="${queuing.events.username}"
password="${queuing.events.password}"
virtual-host="${queuing.events.virtual-host}"
publisher-returns="true"/>
<rabbit:template id="amqpTemplate_2" connection-factory="rabbitConnectionFactory_2" />
<rabbit:admin id="rabbitAdmin_2" connection-factory="rabbitConnectionFactory_2"/>
<rabbit:listener-container connection-factory="rabbitConnectionFactory_2" auto-startup="true" requeue-rejected="false" />
<bean id="rabbitListenerContainerFactory_2" class="org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory">
<property name="connectionFactory" ref="rabbitConnectionFactory_2"/>
</bean>