thảo luận Kinh nghiệm xử lý schedule task

  • Người tạo chủ đề Người tạo chủ đề KumiShida
  • Ngày bắt đầu Ngày bắt đầu
Chào mọi người, mình hay gặp các task cần được xử lý trong thời điểm nhất định mà thời điểm thì không cố định, ví dụ như table Record, mỗi row sẽ có thuộc tính là start_time, chẳng hạn 12:00:00, thì khi tới 12:00:00 cần chạy một số function cho record này.
Hiện tại mình đang dùng background task với interval để check thôi. Cách này quét hơi nhiều, mọi người có ý tưởng nào ổn hơn không :p

Sent from Xiaomi Redmi S2 using vozFApp
Scheduler scheduler = schedulerFactoryBean.getScheduler();

// Lấy danh sách cua task tuwf cơ sở dữ liệu.
List<ScheduledTaskEntity> tasks = taskService.getAllTasks();

for (ScheduledTaskEntity task : tasks) {
String cronExpression = task.getCronExpression();

JobDetail jobDetail = JobBuilder.newJob(TaskJob.class)
.withIdentity(task.getName())
.build();

Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(task.getName() + "_trigger")
.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
.build();

scheduler.scheduleJob(jobDetail, trigger);
}

scheduler.start();
 
Tôi dùng Linux systemd timer cho nó đỉnh cao

Đùa chút, chứ chạy theo time block vd trong khoảng từ 11h - 11h15 chẳng hạn thì dễ code hơn nhiều
 
Python thì có Airflow, Go thì có Temporal, đáp ứng được nhu cầu chủ thớt nhưng hạn chế là cần có một service riêng để chạy lũ này
 
Job nó lưu trong memory thôi thím, hỗ trợ nhiều loại cron, 1 time...

Thím nằm vùng à :shame:
E cũng tên T mà UIT K17 :love:
Tiện đây hỏi về một bài toán nhờ các thím giải đáp là e có 1 pool worker cùng nhau query trên 1 bảng để lấy tasks của 1 user để xử lý. Nhưng có constraint là user chỉ được xử lý maximum n task 1 lần, làm sao mình có thể đảm bảo nhỉ.
E đang suy nghĩ là lưu số concurrent worker đang xử lý vào redis nhưng cảm thấy không chắc là luôn luôn có n worker đc chạy maximum
 
Java có tùy chỉnh lập lịch chạy tùy theo funtion chạy đúng thời gian đó bác
 
cron job nha thím
cronJob set giờ cố định mà, chạy từng giây để quét job nó phèn lắm, Java hỗ trợ lập job custom chạy từng thời điểm, và có thể check job đang chạy và chỉnh tùy ý, có nhiều node thì thêm distributed lock để tránh job chạy duplicate
 
cronJob set giờ cố định mà, chạy từng giây để quét job nó phèn lắm, Java hỗ trợ lập job custom chạy từng thời điểm, và có thể check job đang chạy và chỉnh tùy ý, có nhiều node thì thêm distributed lock để tránh job chạy duplicate
đâu
em chỉ nói chung khái niệm mấy cái job chạy delay không cần nhất thời thôi
chứ em không có nói trong java :v tại em không có code java
còn chuyện custom job khi code thì tùy yêu cầu mình muốn làm gì chẳng được, thiếu gì thứ hỗ trợ
 

Thống kê chủ đề

Ngày tạo
KumiShida,
Người trả lời cuối
tsongafan,
Trả lời
29
Lượt xem
6.353
Quay lại
Lên đầu trang