java - 从 spring application.properties 禁用监听兔子队列

标签 java spring spring-boot spring-rabbit

我想在 spring 中创建一个 application-development.properties 文件来定义一个开发环境。在这种环境下,我想禁用对兔子队列的监听,因为我不想在调试等时干扰暂存队列。

问题是 - 我找不到控制它的属性。没有“Activity ”属性或“启用”属性或任何东西..

这些是我在 Spring docs 中找到的属性:

# RABBIT (RabbitProperties)
spring.rabbitmq.addresses= # connection addresses (e.g. myhost:9999,otherhost:1111)
spring.rabbitmq.dynamic=true # create an AmqpAdmin bean
spring.rabbitmq.host= # connection host
spring.rabbitmq.port= # connection port
spring.rabbitmq.password= # login password
spring.rabbitmq.requested-heartbeat= # requested heartbeat timeout, in seconds; zero for none
spring.rabbitmq.listener.acknowledge-mode= # acknowledge mode of container
spring.rabbitmq.listener.concurrency= # minimum number of consumers
spring.rabbitmq.listener.max-concurrency= # maximum number of consumers
spring.rabbitmq.listener.prefetch= # number of messages to be handled in a single request
spring.rabbitmq.listener.transaction-size= # number of messages to be processed in a transaction
spring.rabbitmq.ssl.enabled=false # enable SSL support
spring.rabbitmq.ssl.key-store= # path to the key store that holds the SSL certificate
spring.rabbitmq.ssl.key-store-password= # password used to access the key store
spring.rabbitmq.ssl.trust-store= # trust store that holds SSL certificates
spring.rabbitmq.ssl.trust-store-password= # password used to access the trust store
spring.rabbitmq.username= # login user
spring.rabbitmq.virtual-host= # virtual host to use when connecting to the broker

我确实找到了一种不使用 Spring profiles 加载包含监听器定义的 amqp-context.xml bean 的方法。并添加 <beans profile="development"> .. </beans>到 xml,但这不太灵活,因为我必须定义不同的配置文件,并且更改它们包含的内容涉及更改代码。

编辑这是我的 amqp-context.xml 的样子:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:task="http://www.springframework.org/schema/task" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:rabbit="http://www.springframework.org/schema/rabbit"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/task
        http://www.springframework.org/schema/task/spring-task-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/rabbit 
        http://www.springframework.org/schema/rabbit/spring-rabbit-1.3.xsd">

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="ignoreResourceNotFound" value="true" />
        <property name="locations">
            <list>
                <value>application.${env:xxxx}.properties</value>
            </list>
        </property>
    </bean>
    <rabbit:connection-factory id="connectionFactory" host="${rabbit_host}"
        virtual-host="${rabbit_virtual_host}" username="${rabbit_username}" password="${rabbit_password}" port="${rabbit_port}"/>   

    <!-- Connection Factory -->
    <bean id="rabbitConnFactory"
        class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
    </bean>


    <!-- Spring AMQP Template -->
    <bean id="template" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="routingKey" value="${my_queue}" />
        <property name="queue" value="${my_queue}" />
    </bean>

    <!-- Spring AMQP Admin -->
    <bean id="admin" class="org.springframework.amqp.rabbit.core.RabbitAdmin">
        <constructor-arg ref="rabbitConnFactory" />
    </bean>

    <rabbit:listener-container connection-factory="connectionFactory" requeue-rejected="false" concurrency="10">
        <rabbit:listener ref="ProcessMessage"
            queue-names="${queue_name}" />
    </rabbit:listener-container> 

    <bean id="ProcessStuff" class="Process" />



</beans>

有没有人知道如何直接从 application.properties 文件管理监听队列?请问?

最佳答案

作为等待 Boot 1.3 的替代方法,您可以将自己的 key 添加到 application-development.properties,如

rabbit.auto-startup=false

然后像这样修改你的 amqp-context.xml

<rabbit:listener-container connection-factory="connectionFactory" requeue-rejected="false" concurrency="10" auto-startup=${rabbit.auto-startup}>

关于java - 从 spring application.properties 禁用监听兔子队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31589401/

相关文章:

java - Eclipse,将包从一个项目移动到另一个项目

java - Box2d 复制一个 body (libgdx)

java - Spring boot 构建变体 使用 gradle 的配置文件特定属性

spring-boot - FeignClient 日志打印两个已配置的拦截器调用,这会混淆运行时识别哪个拦截器是实际的

java - 在 Logback 将 c3po 登录转发到文件

java - 如何使用 mysql 优化 solr 索引

java - 使用Futures时Spring Boot超时

java - 用于检索多行的 JDBCTemplate queryForMap

java - 使用 Caffeine 在 Spring Boot 中进行缓存

java - 是否允许使用不同微服务中的相同表?