【问题标题】:Cancelling and rescheduling sleep time in uber cadence workflow in java client在 java 客户端的 uber cadence 工作流程中取消和重新安排睡眠时间
【发布时间】:2020-07-10 11:34:22
【问题描述】:

如何根据信号更改节奏工作流程中的睡眠时长?使用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;
}

我还没有找到取消和重新安排工作流睡眠计时器的其他可能性

【问题讨论】:

    标签: java cadence-workflow temporal-workflow


    【解决方案1】:

    这是来自Temporal Java Samples的代码:

    public final class UpdatableTimer {
    
      private long wakeUpTime;
      private boolean wakeUpTimeUpdated;
    
      public void sleepUntil(long wakeUpTime) {
        this.wakeUpTime = wakeUpTime;
        do {
          wakeUpTimeUpdated = false;
          Duration sleepInterval = Duration.ofMillis(this.wakeUpTime - Workflow.currentTimeMillis());
          if (!Workflow.await(sleepInterval, () -> wakeUpTimeUpdated)) {
            break;
          }
        } while (wakeUpTimeUpdated);
      }
    
      public void updateWakeUpTime(long wakeUpTime) {
        this.wakeUpTime = wakeUpTime;
        this.wakeUpTimeUpdated = true;
      }
    
      public long getWakeUpTime() {
        return wakeUpTime;
      }
    }
    

    【讨论】:

    • 完美,谢谢!是的,注释 WorkflowMethod 和 SignalMethod 只是为了这个示例代码而在实现
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多