Tôi biết điều đó không công bằng với những người dùng đất nung, nhưng có ai đã cố gắng sử dụng Hazelcast để sử dụng các công việc theo lịch trong một môi trường nhóm không?Các công việc được lập lịch biểu Hazelcast (hỗ trợ của Quartz?)
Việc thực hiện đơn giản nhất tôi có thể hình ảnh là kiến trúc sau:
- Một khóa Hazelcast toàn cầu để đảm bảo chỉ có một máy chủ có khởi động cấu hình thạch anh.
- Chạy các tác vụ thực tế dưới dạng DistributedTask. (điều này có thể được thực hiện sau này, cho thời điểm các tác vụ được lên lịch nặng sẽ cần phải quan tâm đến việc kích hoạt DistributedTask)
- Ngay sau khi máy chủ giữ khóa bị khóa, một máy chủ khác sẽ khóa.
Tôi tin rằng đây sẽ là một lợi thế lớn cho những người đã có Hazelcast, vì họ sẽ không yêu cầu toàn bộ môi trường phức tạp bằng cách mở công cụ đất nung mọi lúc.
Hiện tại, tôi đã mã hóa giải pháp đơn giản nhất là chỉ thực hiện một nút để phụ trách việc kích hoạt trình kích hoạt Quartz. Vì tôi chỉ sử dụng các trigger kích hoạt Cron, nó có thể là một giải pháp có thể chấp nhận được nếu tôi xử lý việc tạo DistributedTask cho các tác vụ kích hoạt nặng.
Dưới đây là phần mở rộng org.springframework.scheduling.quartz.SchedulerFactoryBean của tôi mà làm cho nó xảy ra:
@Override
public void start() throws SchedulingException {
new Thread(new Runnable() {
@Override
public void run() {
final Lock lock = getLock();
lock.lock();
log.warn("This node is the master Quartz");
SchedulerFactoryBean.super.start();
}
}).start();
log.info("Starting..");
}
@Override
public void destroy() throws SchedulerException {
super.destroy();
getLock().unlock();
}
Xin vui lòng, cho tôi biết nếu tôi đang thiếu một cái gì đó lớn và nếu điều này có thể được thực hiện.
Tôi đã thêm hai tệp vào github. Dưới đây là phần mở rộng RAMJobStore:
Và đây là phần mở rộng mùa xuân SchedulerFactoryBean:
FYI, có một yêu cầu tính năng để thực hiện phân phối theo lịch được phân phối trong Hazelcast: https://github.com/hazelcast/hazelcast/issues/115 – ccleve