我一直试图将通知发送给我的客户一次。我正在使用kubernetes,并且创建了多个spring boot应用程序,因为我有2个副本。一切都很好,但是当调度程序运行时,每个调度程序都可以发送通知。我对石英有些了解,但配置似乎有些复杂。有没有简便的方法?
@Scheduled(fixedDelayString = "300000")
public void sendFlowerNotification() {
//Code
}
答案 0 :(得分:3)
您还可以使用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作为环境变量。 dlock会自动处理它。
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
有关使用的信息,请参见article。