Отмена и перепланирование времени ожидания в рабочем процессе Uber Cadence в java клиенте - PullRequest
1 голос
/ 30 марта 2020

Как изменить продолжительность сна в каденции рабочего процесса на основе сигнала? Это правильный способ использования java клиента?

private int timeout;

@Override
@WorkflowMethod
public void sleepAndWakeUp(int sleepTimeout) {
    this.timeout = sleepTimeout;
    sleep();
    System.out.println("Woken up after " + this.timeout + " s sleep");
}

private void sleep() {
    int currentTimeout = this.timeout;
    Workflow.await(Duration.ofSeconds(this.timeout), () -> {
        boolean cancelTimer = currentTimeout != this.timeout;
        if(cancelTimer) {
            sleep();
        }
        return cancelTimer;
    });
}

@Override
@SignalMethod
public void snooze(int sleepTimeout) {
    this.timeout = sleepTimeout;
}

Я не нашел другой возможности отменить и перепланировать таймер отключения рабочего процесса

1 Ответ

1 голос
/ 31 марта 2020

Я бы упростил это до:

private long wakeupTime;

@Override
@WorkflowMethod
public void sleepAndWakeUp(int sleepTimeout) {
    this.wakeupTime = Workflow.currentTimeMillis() + sleepTimeout;
    Workflow.await(() -> Workflow.currentTimeMillis() >= wakeupTime);
}

@Override
@SignalMethod
public void snooze(int sleepTimeout) {
    // Or whatever calculation logic is.
    // For example you can calculate from the time the workflow started.
    wakeupTime = Workflow.currentTimeMillis() + sleepTimeout;
}

Я предполагаю, что вы поместили @WorkflowMethod и @SignalMethod только для реализации этого примера кода, поскольку они принадлежат только интерфейсу рабочего процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...