6

Tôi đang sử dụng Bộ lập lịch thạch anh làm hạt mùa xuân trong môi trường nhóm.Trình lên lịch thạch anh: Kích hoạt một số công việc trên mỗi nút cụm và một số chỉ một lần cho mỗi cụm

Tôi có một số công việc được chú thích bằng @NotConcurrent và chúng đang chạy một lần cho mỗi cụm (nghĩa là chỉ trong một nút, chỉ trong một chuỗi).

Bây giờ tôi cần chạy một công việc trên mọi nút của cụm. Tôi đã xóa chú thích @NotConcurrent nhưng nó chỉ chạy trên mọi chuỗi trên một máy. Nó không bị bắn vào các nút khác.

Tôi nên chú thích công việc gì?

Ví dụ: Job1 NotConcurrent annotation được lên lịch lúc nửa đêm => Nó chỉ kích hoạt trên 1 máy mỗi nửa đêm. Job2 chú thích được lên lịch vào lúc nửa đêm => Nó kích hoạt trên mỗi máy mỗi nửa đêm.

Cảm ơn bạn.

Trả lời

7

Công việc AFAIK Quartz luôn được thực thi trên một nút được chọn bởi Quartz. Chú thích @NonConcurrent chỉ ngăn không cho Quartz thực hiện cùng một công việc đồng thời trên một nút cụ thể.

Nói cách khác, bạn không thể làm cho Quartz thực hiện công việc trên nhiều nút đồng thời. Nó luôn luôn chọn một nút duy nhất để thực hiện công việc.

Để nhận ra những gì bạn mô tả, bạn có thể cần nhiều công việc (sử dụng cùng một lớp công việc và không có trình kích hoạt liên quan). Sau đó, bạn sẽ cần triển khai một số loại công việc của một dàn nhạc sẽ kết nối từ xa, ví dụ: thông qua JMX hoặc RMI, cho các nút riêng lẻ và kích hoạt các công việc theo cách thủ công.

Bạn có thể muốn kiểm tra sản phẩm QuartzDesk (www.quartzdesk.com) cung cấp dịch vụ web cung cấp điểm đầu cuối mà bạn có thể kết nối với các cá thể lên lịch thạch anh riêng lẻ.

+3

Cảm ơn bạn. Biết được giới hạn này đã dẫn tôi sử dụng chú thích @ @ schedulechedation với biểu thức cron để khởi chạy công việc đó trên tất cả các nút cluster. Cách tiếp cận lai này hoạt động khá tốt. – fnqlo

+0

Xin chào Jan, bạn có thể giải thích một giải pháp khả thi để biết thêm chi tiết không? Tôi có một vấn đề tương tự, tôi cần phải chạy một nhiệm vụ trên tất cả các nút Weblogic (hiện tại có 2). Tôi muốn có thể làm điều đó đặc biệt (ví dụ: từ một servlet). Tôi đã sử dụng thạch anh cho một số công việc theo lịch trình, vì vậy tôi đã tự hỏi liệu có thể ủy nhiệm phân phối tác vụ này cho nó không. Cảm ơn – andreybavt

+0

Ý tưởng là bạn triển khai công việc của nhân viên, nhưng bạn không liên kết bất kỳ trình kích hoạt nào với họ. Sau đó, bạn có một số loại công việc của một dàn nhạc sẽ được kết hợp với (các) trình kích hoạt. Khi Quartz bắn công việc của dàn nhạc, công việc chỉ đơn giản là kết nối thông qua dịch vụ web JMX, RMI hoặc JAX-WS (nếu bạn có QuartzDesk tại chỗ) với các nút Quartz nơi bạn muốn thực hiện công việc của nhân viên. Nếu bạn muốn công việc của nhân viên của bạn thực hiện trên tất cả các trường hợp Quartz, thì công việc của dàn nhạc sẽ đơn giản lặp qua danh sách các trường hợp Quartz được cấu hình và kích hoạt các công việc đó theo cách thủ công trên JMX/RMI/JAX-WS. –

Các vấn đề liên quan