0

我在使用 Spring 集成连接到 RabbitMQ 的 Spring Boot 项目中遇到了一些错误。我在 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>
<!--  -->

但我正在创建每个组件中的两个。如何设置初选?

现在问题来了,我用的是这个版本的spring cloud:

<spring-cloud.version>Dalston.SR2</spring-cloud.version>

一切正常,但如果我将版本更新为:

<spring-cloud.version>Edgware.RELEASE</spring-cloud.version>

这个错误来了:

Description:

Parameter 0 of method rabbitSender in org.springframework.cloud.sleuth.zipkin2.sender.ZipkinRabbitSenderConfiguration required a single bean, but 2 were found:
- rabbitConnectionFactory: defined in null
- rabbitConnectionFactory_2: defined in null


Action:

Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed

并且由于这种依赖性而出现错误:

    <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>
    ...

https://github.com/fjmpaez911/spring-integration-zipkin-cloud

所以我需要知道如何为 RabbitMQ 设置主要配置,此外我认为这可能是一个问题,因为这个错误只有在我使用这个版本Edgware.RELEASE 时才会出现

我错过了什么吗?

4

2 回答 2

1

fran,在 Edgware.RELEASE<artifactId>spring-cloud-sleuth-zipkin</artifactId>中将解决 Zipkin 2 依赖项尝试<artifactId> spring-cloud-starter-zipkin-legacy</artifactId>使用

于 2018-01-07T18:14:38.133 回答
0

要在 XML 文件中定义 RabbitMQ 的主连接工厂,您可以执行以下操作:

<!-- 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>
于 2018-09-26T19:55:47.847 回答