群组媒体资源在Spring Stream Cloud中不起作用?

时间:2019-12-25 11:45:32

标签: java spring-boot apache-kafka spring-cloud spring-cloud-stream

我使用Spring Stream Cloud在Kafka上消费消息。 当在kafka上产生消息时,所有消费者都受到打击。

但是kafka的文档说通过组的使用 只有一个消费者消费消息。

这是我的消费者代码。

@EnableBinding(Sink.class)

public class Consumer2 {


    @StreamListener(target = Sink.INPUT)
    public void consume(String message) {
        System.out.println("33333");

    }

    @StreamListener(target = Sink.INPUT)
    public void consume1(String message) {
        System.out.println("444444");

    }


}
}

这是我的配置 但是我的两个方法都叫:(

spring:
  cloud:
    stream:
      default-binder: kafka
      kafka:
        binder:
          brokers:
            - localhost:9092
      bindings:
        input:
          binder: kafka
          destination: abbas
          content-type: text/plain
          group: input-group-1

        output:
          binder: kafka
          destination: abbas
          group: output-group-1
          content-type: text/plain

2 个答案:

答案 0 :(得分:0)

使用该配置,您只有1个使用者(SINK.INPUT) ,而不是2个使用者(@StreamListener不是使用者,它是处理入站消息的模型)

这就是为什么spring将入站消息路由到具有相同接收器的两个@StreamListener批注。

答案 1 :(得分:0)

在一个实例组中没有影响。

在运行我们的应用程序的多个实例时,每当输入通道中出现一条新消息时,都会通知所有订阅者。

大多数时候,我们只需要处理一次消息。 Spring Cloud Stream通过消费者群体实现了这一行为。

要启用此行为,每个使用者绑定都可以使用spring.cloud.stream.bindings..group属性指定组名:

https://www.baeldung.com/spring-cloud-stream 5.4