2013-05-09 28 views
5

Được đề cập trong tài liệu về bão, cơn bão đó sẽ phát lại bộ xử lý mà quá trình xử lý đã hết thời gian chờ. Câu hỏi của tôi là nếu cơn bão làm điều này tự động (không gọi fail() trên vòi gốc) hoặc là trách nhiệm của vòi gốc để phát lại tuple (fail() được gọi và phát lại nên được thực hiện bên trong hoặc thậm chí ở đâu đó bên ngoài)?Storm có phát lại quá trình xử lý đã hết thời gian không?

Trả lời

6

Để phát lại đúng thời gian chờ, bạn phải neo tuple bằng id khi bạn phát ra nó từ vòi. Khi thời gian chờ xảy ra, bất cứ điều gì bạn sử dụng như một neo được trả về phương thức thất bại (fail (object anchorId)). Bây giờ bạn có thể sử dụng anchorId của tuple không thành công/hết thời gian để phát lại hoặc bất kỳ thứ gì khác bạn muốn làm với bộ thời gian chờ. Mỗi id neo phải là duy nhất. Một ví dụ về một id neo là một id cơ sở dữ liệu. Khi bạn thất bại, bạn có thể sử dụng id databse để tạo lại tuple của bạn và phát lại nó. Vì vậy, để trả lời câu hỏi của bạn, bạn phải có logic replay của bạn bên trong thất bại và bạn có thể sử dụng anchorId để tạo lại tuple của bạn. Hy vọng thông tin này giúp

+0

Có cách nào để biết, lỗi nào bị lỗi trong phương thức fail() của Spout không? Về cơ bản, tôi muốn gửi thông tin cụ thể về bolt trong tuple trong khi ack() hoặc fail(). Làm thế nào điều này có thể được thực hiện? –