Tôi có một ứng dụng Grails có một số tối ưu hóa tính toán chuyên sâu với thời gian chạy ~ 5 phút (có lẽ nhiều hơn). Hiện tại, tôi đang làm điều này trong chuỗi yêu cầu chính, nghĩa là phải mất 5 phút để yêu cầu trả lại. Nó hoạt động, nhưng tất nhiên là khủng khiếp từ một góc nhìn khả năng sử dụng.Cách tốt nhất để tạo hàng đợi cho các công việc lâu dài trong ứng dụng Grails là gì?
Vậy cách tốt nhất để thực hiện điều này theo cách không đồng bộ là gì? Tôi giả sử một ThreadPoolExecutor sẽ phải được tham gia, nhưng làm thế nào để tôi bắt đầu và truy cập nó? Tôi có thể mô hình hóa nó như một dịch vụ Grails không? Hoặc một công việc (có vẻ như là những người chỉ có nghĩa là cho công việc định kỳ mặc dù)?
Ngoài ra, cách tốt nhất để xử lý trạng thái công việc là gì? Thông qua một lá cờ hoặc có lẽ là một lớp học hoàn toàn mới trong DB? Trình duyệt có hiển thị trình quay vòng và tiếp tục bỏ phiếu cho đến khi trạng thái thay đổi không?
Lợi ích gì so với việc sử dụng ThreadPoolExecutor? Nghe có vẻ phức tạp hơn thế. –
Nó chắc chắn phức tạp hơn. Những lợi ích chính sẽ là xung quanh một số khả năng giám sát và bỏ phiếu mà câu hỏi của bạn ám chỉ đến một số yêu cầu xung quanh. Rất nhiều loại công cụ này được giải quyết trong thế giới JMS, nhưng có nhiều thiết lập/bảo trì xung quanh nó. Nó thực sự phụ thuộc vào cách "enterprisey" yêu cầu của bạn. Nếu bạn không quan tâm nhiều đến việc giám sát hoặc điều gì sẽ xảy ra nếu thùng chứa của bạn bị hỏng khi đang xử lý, thì tôi sẽ làm điều gì đó đơn giản hơn. Chỉ là một lựa chọn tiềm năng. –
Ah, tôi hiểu rồi. Vâng, giám sát duy nhất tôi cần là dành cho người dùng đang chờ một công việc cụ thể hoàn thành. Tôi không cần an toàn giao dịch, vì vậy tôi sẽ đi cho một cách tiếp cận đơn giản hơn. –