@StreamListener(kafka):如何停止使用者以中断处理

时间:2019-12-09 14:46:28

标签: apache-kafka kafka-consumer-api apache-kafka-streams spring-kafka spring-cloud-stream

下面是我们如何将消息发布到主题,

for(int i=0;i<=10000;i++){

  send("topic_name", "message");

}

对于上述主题,我们具有以下流侦听器,

   @StreamListener("topic_name")
    public void process(KStream<String, String> inputKStream) {
        //processing of messages
    }

现在的要求是,我们需要在触发API时停止处理消息。

为此,我们有一个如下所示的控制器,

@Autowired
private CustomBindingEndpoint endpoint;

@PutMapping(value = "stop", produces = APPLICATION_JSON_UTF8_VALUE)
public void stopProcess() {
    endpoint.changeState("topic_name", State.STOPPED);
}

CustomBindingEndpoint.java与https://github.com/spring-cloud/spring-cloud-stream/issues/1650#issuecomment-476626008

一旦触发此API,我们期望上述StreamListener(“ topic_name”)应该停止(必须停止进一步消耗)

但是一旦触发,即使为“ topic_name”调用binding.stop(),使用者仍然会使用消息。

我知道binding.stop()会阻止使用者使用消息。如果我错了,请纠正。请建议我们如何实现这一目标。

0 个答案:

没有答案
相关问题