【问题标题】:How to configure multiple consumers to a single destination queue in spring cloud stream SQS binder如何在spring cloud stream SQS binder中将多个消费者配置到单个目标队列
【发布时间】:2022-06-18 02:00:21
【问题描述】:

我的应用程序正在接收具有不同负载的两个事件。所以我为每个事件写了两个不同的消费者。

消费者1:

@Bean
public Consumer<TestEvent1> testEvent1() {
  // my consumer logic
}

消费者2:

@Bean
public Consumer<TestEvent2> testEvent2() {
  // my consumer logic
}

以下是spring cloud stream的配置:

spring:
  cloud:
    stream:
      sqs:
        bindings:
          testEvent1-in-0:
            consumer:
              snsFanout: true
              messageDeletionPolicy: ON_SUCCESS
              waitTimeout: 20
              maxNumberOfMessages: 10
              visibilityTimeout: 30
          testEvent2-in-0:
            consumer:
              snsFanout: true
              messageDeletionPolicy: ON_SUCCESS
              waitTimeout: 20
              maxNumberOfMessages: 10
              visibilityTimeout: 30
      bindings:
        testEvent1-in-0:
          destination: events-queue
        testEvent2-in-0:
          destination: events-queue
      default-binder: sqs

但是使用上述配置,两个消费者都无法正常工作。如果我要删除任何一个消费者,另一个正在工作。

我如何能够配置云流,以便两个消费者都可以根据生成的事件有效负载工作。

【问题讨论】:

    标签: java spring spring-cloud-stream


    【解决方案1】:

    当你有多个功能时,你需要告诉框架哪些需要被激活。当应用程序中只有一个功能时,Spring Cloud Stream 将简单地激活该功能。这就是当您删除一个消费者时它起作用的原因。您可以使用以下配置来激活两个消费者。

    spring.cloud.function.definition: testEvent1;testEvent2
    

    【讨论】:

      【解决方案2】:

      我尝试了相同的方法,但在我的情况下,只有一个消费者收到消息并由于未解析消息而引发错误。 o.s.i.handler.LoggingHandler - org.springframework.messaging.MessageHandlingException:消息处理程序发生错误 [org.springframework.cloud.stream.function.FunctionConfiguration$FunctionToDestinationBinder$1@6591db6d];

      【讨论】:

        猜你喜欢
        • 2018-06-20
        • 2016-09-25
        • 1970-01-01
        • 2023-03-29
        • 2017-04-28
        • 2023-01-03
        • 2021-07-09
        • 1970-01-01
        相关资源
        最近更新 更多