2013-05-16 41 views
6

Tôi biết tầm quan trọng của việc sử dụng UPS để ngăn chặn tắt máy ngay lập tức của máy chủ. Làm thế nào để tôi nghe một sự kiện như vậy trong một ứng dụng Java?Tắt ứng dụng một cách duyên dáng khi mất điện

Giả sử UPS của tôi sẽ tiếp tục hoạt động dưới tải đầy trong 5 phút khi mất điện. Họ máy chủ sẽ tiếp tục chạy nhưng làm thế nào ứng dụng của tôi biết rằng thời gian của nó để bắt đầu tắt mọi thứ xuống đúng cách?

Ứng dụng cụ thể này chủ yếu là giao dịch với khách hàng đến các giao dịch cơ sở dữ liệu. Tôi chủ yếu quan tâm đến dữ liệu bị hỏng trong trường hợp máy chủ mất quyền lực ngay lập tức ở giữa các giao dịch mysql. Có phải các điểm dưới đây là một cách thích hợp để xử lý tình huống nguồn điện không?

  • Tắt nguồn. Chế độ pin UPS. Ứng dụng phát hiện điều này.
  • Ứng dụng bằng cách nào đó chặn tất cả các yêu cầu đến (bất kỳ đề xuất nào về việc này sẽ hữu ích)
  • Trong vòng vài phút tất cả giao dịch đang được xử lý phải hoàn tất.
  • Ứng dụng tắt máy
  • Nếu hết pin, máy chủ sẽ hỏng ... chờ để khôi phục.

Có cách nào để tự động khởi động lại máy chủ và ứng dụng khi điện tiếp tục hay việc này phải được thực hiện thủ công không?

+0

Ứng dụng nào đang chạy trên ứng dụng? – andrewmu

+0

Máy chủ Ubuntu. Nên đã đề cập điều đó. – ryandlf

Trả lời

3

Xử lý UPS có thể được xử lý ở cấp hệ điều hành, với các công cụ giám sát như SNMP hoặc tập lệnh Hệ thống.

Tôi nhìn trực tuyến, có thể bạn sẽ tìm thấy nhiều tập lệnh để thực hiện một số tác vụ khi nhận sự kiện Power Failure từ UPS.

Bạn cần phải gửi một tín hiệu QUIT (trên Unix/Linux) để JVM PID của bạn và ở phía bên JVM bạn có thể đăng ký một cái móc tắt máy với phương pháp Runtime.addShutdownHook

Nếu sử dụng một khuôn khổ như mùa xuân, nó chắc chắn đã đăng ký một cái gì đó và sẽ gọi các phương pháp tiêu diệt hạt của bạn nếu cấu hình.

+0

Điều này có vẻ sạch hơn một chút so với giải pháp được đề cập khác (nghe trên ổ cắm). Thật? Bất kỳ lợi ích với cách này qua khác? – ryandlf

+0

Bằng cách nghe ổ cắm và để UPS gửi tín hiệu đến ổ cắm, hệ thống của bạn có thể nhận được cảnh báo trước đó. Bằng cách sử dụng các cơ chế tích hợp của hệ điều hành, có thể hệ điều hành đang thực hiện một số công cụ khác trước khi gửi tín hiệu đến JVM. Nhưng điều này không có nghĩa là một phương án thay thế tốt hơn cái kia. Nếu một thông báo ban đầu là cần thiết và được thực hiện thông qua một socket, ứng dụng này cũng nên phản ứng trên các shutdownevents của JVM vì cũng có thể có các lý do khác để tắt máy. – mschenk74

1

Tạo ổ cắm java để nghe trên cổng được xác định từ máy chủ cục bộ trong ứng dụng Java và định cấu hình phần mềm UPS để gửi sự kiện tới cổng này khi mất điện.

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