java - Spring RabbitMQ SimpleRabbitListenerContainerFactory 用法

标签 java spring rabbitmq spring-integration spring-rabbit

来自docs ,我想通过在不重新启动应用程序的情况下动态更改消费者来使用来自队列的消费。

我确实看到 Spring RabbitMQ 最新版本支持相同的,但没有改变相同的线索/示例/解释。我看不到相同的正确源代码或如何传递像 maxConcurrentConsumers

这样的参数

我正在使用 Spring RabbitMQ 的基于 XML 的配置以及 Spring 集成

<bean id="rabbitListenerContainerFactory"
      class="org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory">
    <property name="connectionFactory" ref="rabbitConnectionFactory"/>
    <property name="concurrentConsumers" value="3"/>
    <property name="maxConcurrentConsumers" value="10"/>
    <property name="acknowledgeMode" value="AUTO" />
</bean>

<int-amqp:inbound-channel-adapter channel="lowInboundChannel" queue-names="lowLoadQueue" advice-chain="retryInterceptor" acknowledge-mode="AUTO" listener-container="rabbitListenerContainerFactory" />
<int-amqp:inbound-channel-adapter channel="highInboundChannel" queue-names="highLoadQueue" advice-chain="retryInterceptor" acknowledge-mode="AUTO" listener-container="rabbitListenerContainerFactory" />

谁能指导我如何动态配置消费者?

最佳答案

首先你不应该共享相同的rabbitListenerContainerFactory对于不同的 <int-amqp:inbound-channel-adapter> s,因为他们这样做:

protected void onInit() {
    this.messageListenerContainer.setMessageListener(new ChannelAwareMessageListener() { 

因此,只有最后一个适配器获胜。 从另一方面看,甚至没有理由拥有多个适配器。您可以指定 queue-names="highLoadQueue,lowLoadQueue"对于单个适配器。 尽管在 listener-container 的情况下您必须指定 queuesSimpleRabbitListenerContainerFactory 上.

如果你想改变一些rabbitListenerContainerFactory运行时的选项,你可以将它注入(inject)一些服务并调用它的 setters .

如果我遗漏了什么,请告诉我。

关于java - Spring RabbitMQ SimpleRabbitListenerContainerFactory 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29564694/

相关文章:

java - 如何使用 hibernate 在 SQL Server 数据库中存储 joda DateTime

java - 使用 Javassist 动态添加 Lombok 注释

java - Spring Boot,Spring MVC JSON RequestBody : Unknown property ignored

java - RabbitMQ 的 JUnit 测试

java - Spring 2.1.0.M4rabbitmq声明队列并在运行时将它们绑定(bind)到监听器

rabbitmq - 分布式系统中的消息传递与 RPC(Openstack 与 K8s/Swarm)

java - 使用Java OpenCV库的java.lang.UnsatisfiedLinkError `GOMP_4.0' Travis CI

java - 使用自定义比较器排序的集合不起作用

xamarin.ios - MonoTouch 调用 RabbitMQ .NET DLL 文件 : throw 'Could not load type' error

java - 如何获得 future list 的结果