Apache flink 如何从Java中了解flink作业的状态?

Apache flink 如何从Java中了解flink作业的状态?,apache-flink,flink-streaming,flink-cep,Apache Flink,Flink Streaming,Flink Cep,我有一个正在运行的作业,我只想使用一次恢复重试,因为在此期间不会触发此flink重新启动,我有一个线程尝试解决问题,然后当问题解决后,flink将重新启动,但有时线程需要更长的时间来修复问题并触发重新启动策略,由于问题仍然存在而失败,然后作业停止,但线程可能有另一个迭代,然后应用程序永远不会死,因为我将它作为jar应用程序运行。所以,我的问题是: 是否仍然可以从java代码中了解作业的状态?类似于(JobStatus.cancelled==true) 提前谢谢! 亲切的问候非常感谢菲利佩。这

我有一个正在运行的作业,我只想使用一次恢复重试,因为在此期间不会触发此flink重新启动,我有一个线程尝试解决问题,然后当问题解决后,flink将重新启动,但有时线程需要更长的时间来修复问题并触发重新启动策略,由于问题仍然存在而失败,然后作业停止,但线程可能有另一个迭代,然后应用程序永远不会死,因为我将它作为jar应用程序运行。所以,我的问题是:

  • 是否仍然可以从java代码中了解作业的状态?类似于(JobStatus.cancelled==true)
提前谢谢!
亲切的问候

非常感谢菲利佩。这就是我所需要的,多亏了你,一切都完成了。我在这里共享代码,以防其他人需要

  • 让听众做好准备

        final StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment(...);
    final AtomicReference<JobID> jobIdReference = new AtomicReference<>();
    //Environment configurations
    env.registerJobListener(new JobListener() {
        @Override
        public void onJobSubmitted(@Nullable JobClient jobClient, @Nullable Throwable throwable) {
            assert jobClient != null;
            jobIdReference.set(jobClient.getJobID());
            jobClient = jobClient /*jobClient static public object in the main class*/;
        }@Override
        public void onJobExecuted(@Nullable JobExecutionResult jobExecutionResult, @Nullable Throwable throwable) {
            assert jobExecutionResult != null;
            jobExecutionResult.notify();
        }
    });
    

    为Flink创建JobListener还有一个悬而未决的问题。我想这就是你想要的。问题仍然存在,但已经实现了一些代码()。也许您可以尝试使用它
    env.registerJobListener()尝试模仿这个测试用例:这正是我想要的,我会尝试你的想法。谢谢!我很高兴能帮上忙。我自己也会试试
    
        Preconditions.checkNotNull(jobClient);
        final String status = jobClient.getJobStatus().get().name();
        if (status.equals(JobStatus.FAILED.name())) System.exit(1);