Вы также можете использовать dlock , чтобы выполнить запланированное задание только один раз на нескольких узлах.Вы можете просто сделать что-то, как показано ниже.
@Scheduled(fixedDelayString = "300000")
@TryLock(name = "flowerNotification", owner = POD_NAME, lockFor = THREE_MINUTES)
public void sendFlowerNotifications() {
List<Notification> notifications = notificationService.getNotifications();
for(Notification notification: notifications){
sendNotification(notification);
}
}
Вы можете отправить POD_NAME в spring как переменную окружения.Длок автоматически с этим справится.
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
См. статью об ее использовании.