Tôi có Bolt (bộ lập lịch) trong cấu trúc liên kết Storm của mình để mở kết nối cho các yêu cầu http.
Tôi muốn thêm cơ chế thử lại trong trường hợp bị lỗi (hết thời gian kết nối, trạng thái không thành công, v.v.). Việc thử lại chỉ nên diễn ra trong chốt lịch trình và không được bắt đầu trên toàn bộ cấu trúc liên kết.
Thông thường, những gì tôi sẽ làm là thêm một hàng đợi để xử lý các lần thử lại và xử lý ngoại lệ (ví dụ: tự động gửi thông báo đến hàng đợi lỗi sau 3 lần..)
Làm điều gì đó như thế này trong một bu lông có được không? Có ai có kinh nghiệm về vấn đề này và có thể đề xuất thư viện nào tôi có thể sử dụng không?
Chắc chắn rồi! Đây có vẻ là một cách hợp lý để xử lý lỗi. Tôi không chắc bạn cần sử dụng thư viện nào, ngoài thư viện cung cấp API để kết nối với hệ thống xếp hàng mà bạn chọn.
Trong Bolt của bạn, bạn có thể có mã như thế này:
@Ghi đè
public void thực thi(Tuple tuple, BasicOutputCollector Collector) {
thử {
// làm điều gì đó có thể thất bại ở đây...
} catch (Exception e) {
// bạn có muốn ghi lại lỗi không?
LOG.error("Lỗi bu lông {}", e);
// bạn có muốn lỗi hiển thị trong Storm UI không?
Collector.reportError(e);
// hoặc chỉ đưa thông tin vào hàng đợi để xử lý sau
}
}
Miễn là bạn bắt được ngoại lệ trong Bolt, cấu trúc liên kết của bạn sẽ không khởi động lại.
Một lựa chọn khác là sử dụng Khả năng tích hợp sẵn của Storm để xử lý tin nhắn được đảm bảoThất bại với bộ dữ liệu và thử lại theo cách này.
Tôi là một lập trình viên xuất sắc, rất giỏi!