2013-01-22 45 views
7

Tôi muốn hỏi phương pháp tốt nhất để chạy một quy trình dài từ một servlet java là gì. Tôi có một webapp và khi khách hàng làm một yêu cầu nó chạy một servlet. Servlet này sẽ nhận được một số tham số từ yêu cầu và sau đó chạy một tiến trình. Quá trình này có thể mất một thời gian dài vì vậy tôi cần phải chạy nó một cách riêng biệt. Khi quá trình này thực thi xong, nó sẽ gửi một email với kết quả.Cách tiếp cận tốt nhất để chạy một quy trình dài từ một servlet java là gì?

Xin cảm ơn trước.

Trả lời

5

Sử dụng nhóm chủ đề. Mỗi khi bạn nhận được một yêu cầu, hãy tạo một nhiệm vụ và gửi nó vào nhóm luồng. Điều này sẽ đảm bảo quá nhiều yêu cầu không đưa máy chủ đến đầu gối của nó, bởi vì bạn kiểm soát số lượng chuỗi đồng thời bạn có thể có và số lượng tác vụ có thể đợi trong hàng đợi của các chủ đề chờ đợi.

Xem javadoc cho ExecutorsThreadPoolExecutor.

1

tôi thấy hai khả năng để làm điều này:

  1. Tạo một thread riêng biệt cho mỗi công việc (cách tiếp cận hồ bơi thread). Điều này là có thể, nhưng có khả năng có thể tạo ra một vấn đề hiệu suất.
  2. Tạo đơn đăng ký thứ hai. Ví dụ bạn có thể lưu các tham số cho DB. Ứng dụng thứ hai sẽ theo dõi DB này với một số khoảng thời gian và làm một cái gì đó. Thay vào đó DB bạn có thể sử dụng một số nhà quản lý hàng đợi thông điệp như WebSphere MQ

cách tiếp cận thứ hai có lợi thế: nếu ứng dụng không thể xử lý yêu cầu bây giờ bằng một số lý do, ứng dụng có thể trở lại nó sau này

2

Mặc dù âm thanh này một chút nguy hiểm khi gọi một servlet sinh ra một quá trình (không có khả năng điều chỉnh thích hợp tại chỗ), bạn có thể sinh ra một quá trình bằng cách sử dụng Runtime.getRuntime().exec(). Tốt hơn hết là sử dụng ProcessBuilder để chuẩn bị các đối số quy trình và sinh ra nó.

2

Thông thường các loại hoạt động được giao cho một loại mô-đun ứng dụng khác như một bean điều khiển thư và dường như là giải pháp tuân thủ tiêu chuẩn và sạch nhất. Mặc dù hầu hết các máy chủ sẽ không phàn nàn nếu bạn tạo chủ đề của riêng bạn (mà bị cấm bởi tiêu chuẩn nhưng hiếm khi được thi hành) số lượng quản lý cần thiết để thiết lập hàng đợi công việc của riêng bạn và môi trường thực thi gộp lại không thực sự đáng giá theo ý kiến ​​của tôi.

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