Kafka在Spring Boot关闭之前手动确认

时间:2019-02-14 10:51:29

标签: java spring-boot apache-kafka spring-kafka predestroy

这个问题很简单,但是我好一阵子都找不到答案。

我对我的Kafka使用者有手动确认,在关闭应用程序之前,我想执行一些代码,然后确认给Kafka。为此,我使用了@PreDestroy批注:

$.a.b.c.passportPhoto

现在主要的问题是,执行此操作之前,Kafka使用者已关闭,因此消息实际上并未得到确认,因此在启动应用程序时会再次收到消息,因此我需要某种解决方法或其他方法将此函数指定为关机前首先调用的函数。证明可以在日志中看到:

@PreDestroy
private void beforeShutdown() {
    //do some code
    acknowledgement.acknowledge(); //this variable is stored on class level

如果有人有建议,请告诉。

1 个答案:

答案 0 :(得分:0)

实施SmartLifeCycle并将代码放入stop()。将bean放在很高的Phase中,以便在容器之前将其停止。容器默认处于Integer.MAX_VALUE - 100阶段,因此必须高于该阶段。

编辑

class Listener implements SmartLifecycle { // default phase is last (after the containers for start, before for stop).

    private volatile boolean running;

    @Override
    public void start() {
        this.running = true;
    }

    @Override
    public void stop() {
        this.running = false;
    }

    @Override
    public boolean isRunning() {
        return this.running;
    }

    ...

}