在RabbitMQ中配置消费者取消

时间:2015-08-17 20:54:27

标签: rabbitmq spring-amqp spring-rabbit

我们正在使用具有镜像队列的2节点主动 - 主动RabbitMQ群集。镜像策略是:

  

"策略":[{"虚拟主机":" /""名称":" HA-所有&# 34;,"模式":"""适用于─>至":"所有""定义&#34 ;:{" HA-模式":"所有""公顷同步模式":"自动"}"优先":0}]

版本:RabbitMQ 3.5.4,Erlang 17.4,spring-amqp / spring-rabbit:1.4.5.RELEASE

现在,我们正在努力实现消费者取消,如Highly Available Queues中所述。

但是,由于我们没有使用频道,因此我们无法使用上述链接中给出的{{basicConsumer}}方法。

如何设置" x-cancel-on-ha-failover "在配置中是真的吗?

因此bean xml是:

 <rabbit:connection-factory id="connectionFactory"  
  addresses="localhost:5672"  
  username="guest"  
  password="guest"
  channel-cache-size="5" />


<!-- CREATE THE JsonMessageConverter BEAN -->
<bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.JsonMessageConverter" />


 <!-- Spring AMQP Template -->  
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" retry-template="retryTemplate" message-converter="jsonMessageConverter" />

 <!-- in case connection is broken then Retry based on the below policy -->  
 <bean id="retryTemplate" class="org.springframework.retry.support.RetryTemplate">  
<property name="backOffPolicy">  
  <bean class="org.springframework.retry.backoff.ExponentialBackOffPolicy">  
  <property name="initialInterval" value="500" />  
  <property name="multiplier" value="2" />  
  <property name="maxInterval" value="30000" />  
 </bean>  
</property>  
</bean>  

<rabbit:queue name="testQueue" durable="true">
    <rabbit:queue-arguments>
       <entry key="x-max-priority">
           <value type="java.lang.Integer">10</value> 
       </entry>
    </rabbit:queue-arguments>
</rabbit:queue>

<bean id="messsageConsumer"  class="consumer.RabbitConsumer">
</bean>
<rabbit:listener-container
  connection-factory="connectionFactory" concurrency="5" max-concurrency="5"     message-converter="jsonMessageConverter">
<rabbit:listener queues="testQueue" ref="messsageConsumer" />
</rabbit:listener-container>

1 个答案:

答案 0 :(得分:1)

<rabbit:listener-container>实际上在后台填充SimpleMessageListenerContainer bean。最后一个支持public void setConsumerArguments(Map<String, Object> args)就此问题。

因此,要修复您的要求,您只需为SimpleMessageListenerContainer构建原始<bean> messsageConsumer

与此同时,您正在为您的应用程序修复此问题,我们会要求您提供有关添加<consumer-arguments>组件的JIRA。我们可以用当前的GA截止日期解决这个问题。