如何在 spring 云流 SQS 绑定器中将多个消费者配置到单个目标队列

How to configure multiple consumers to a single destination queue in spring cloud stream SQS binder

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

消费者 1:

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

消费者 2:

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

以下是spring云流配置:

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

但是使用上面的配置,两个消费者都不工作。如果我删除任何一个消费者,另一个正在工作。

我怎样才能配置云流,使两个消费者都将根据生成的事件负载工作。

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

spring.cloud.function.definition: testEvent1;testEvent2