java - 在 java 客户端的 uber cadence 工作流程中取消和重新安排睡眠时间
问题描述
如何根据信号更改节奏工作流程中的睡眠持续时间?这是使用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;
}
我还没有找到取消和重新安排工作流睡眠计时器的其他可能性
解决方案
以下是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;
}
}
推荐阅读
- scipy - Python Jupyter Notebook scipy
- influxdb - Influxdb 使用 group by 加速长时间的查询
- ruby - 我无法部署中间人项目
- php - Laravel - 队列作业 - 如何根据分派时传递给它的参数获取作业
- jenkins - 在scriptText中将变量传递给JobDsl种子作业(Jenkins)?
- java - Spring Boot 重复端点
- yii2 - 保存倍数复选框列表
- django - KeysValidator 在 django 中做了什么?
- ios - 将观察者从 ViewController 移动到 ViewModel
- java - java - 如何在没有焦点的窗口中全局检测按下的键?