首页 > 解决方案 > Spring RabbitMQ Consumer - 多个实例

问题描述

我创建了一个 Spring Boot 应用程序,它创建了一个从 RabbitMQ 主题交换中使用的队列。现在我希望能够运行此应用程序的多个实例以实现高可用性和负载平衡。但是,我注意到当我在队列中发布消息时,两个应用程序都在处理该消息。有没有办法配置队列/应用程序,以便消息仅由相同的应用程序之一使用?

请在下面找到我的配置:

 @Bean
  public TopicExchange dLQExchange() {
    return ExchangeBuilder.topicExchange("queue.dlq").build();
  }

  @Bean
  Queue dlq() {
    return QueueBuilder.durable("queue.dlq").build();
  }

  @Bean
  Queue queue() {
    return QueueBuilder.durable("queue")
            .deadLetterExchange("queue.dlq")
            .build();
  }

  @Bean
  public Binding dlqBinding(TopicExchange dLQExchange, Queue dlq) {
    return BindingBuilder.bind(dlq).to(dLQExchange).with("#");
  }

  @Bean
  public TopicExchange producerExchange() {
    return ExchangeBuilder.topicExchange("producer.exchange").build();
  }

  @Bean
  public Binding producer(
          TopicExchange producerExchange, Queue queue) {
    return BindingBuilder.bind(queue)
            .to(producerExchange)
            .with("queue.updated");
  }

  @Bean
  public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
    RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
    rabbitTemplate.setMessageConverter(producerJackson2MessageConverter());
    return rabbitTemplate;
  }

  @Bean
  public Jackson2JsonMessageConverter producerJackson2MessageConverter() {
    return new Jackson2JsonMessageConverter();
  }

标签: spring-bootrabbitmq

解决方案


推荐阅读