2011-10-10 31 views
5

Giả sử tôi muốn có một câu chuyện được tạo bởi một số sự kiện, sau đó ngồi và đợi vài giờ, và nếu không có gì xảy ra, hãy gửi một số lệnh.Sagas dựa trên thời gian với Event Sourcing

Bây giờ, nếu Saga này là tất cả trong bộ nhớ và tôi đã phải khởi động lại ứng dụng/máy chủ, saga sẽ được dỡ xuống và không bao giờ nhìn thấy một lần nữa, phải không?

Tôi có sử dụng Sourcing Event để đưa Saga này lên tốc độ khi hệ thống trực tuyến trở lại không?

Nếu vậy, tôi sẽ cần khá nhiều Cửa hàng sự kiện riêng biệt với "sagas hoạt động" có thể được phát lại khi khởi động hệ thống, để Sagas của tôi tăng tốc. Cho đến nay nó có vẻ tốt với tôi, nhưng làm thế nào tôi sẽ thực hiện thời gian chờ?

Tôi cần một số cách "giả mạo" hết thời gian chờ phát lại, xem xét có thể có một số, thời gian chờ tiếp theo tùy thuộc vào các sự kiện đi vào saga.

Trả lời

6

Cách tốt nhất để đạt được khả năng này là với điểm cuối khác có khả năng trả lại tin nhắn cho bạn tại một thời điểm nhất định. Ví dụ: saga của bạn có thể gửi thông báo tới "người quản lý thời gian chờ" này và nói đánh thức tôi sau 1 giờ hoặc 1 ngày hoặc thậm chí 1 năm. Tin nhắn sau đó sẽ được trả lại cho bạn vào thời điểm đó. Lý tưởng nhất là thông điệp này có ý nghĩa kinh doanh sẽ gây ra một hành động xảy ra.

Có lẽ ví dụ tốt nhất về điều này giống như đăng ký khách hàng ở đâu, nếu khách hàng chưa xác nhận tài khoản của họ trong vòng 7 ngày kể từ khi đăng ký, bạn sẽ thông báo cho họ qua email. "Thông báo hết thời gian chờ" có hiệu quả là: RemindUserToConfirmAccountMessage. Khi tin nhắn này được nhận lại bởi saga sau 7 ngày, saga sẽ xác định dựa trên trạng thái hiện tại của nó, nếu thông báo đó cần được xử lý và email của khách hàng cần được gửi đi. Nhưng nếu người dùng đã xác nhận tài khoản của anh ấy/cô ấy, thư có thể bị hủy mà không có hành động nào được thực hiện.

+0

Làm cách nào để tạo một Saga sống trong 7 ngày? Tôi chắc chắn nó phải được duy trì trong trường hợp khởi động lại dịch vụ, phải không? –

+1

@MauroDestro Bạn không thực sự phải giữ cho sagas của bạn trong bộ nhớ khi sử dụng Sourcing Event. Hãy nghĩ về một saga như một thực thể mà bạn có thể phát lại trước khi nó xử lý một sự kiện. So sánh với cách bạn sẽ phát lại tổng hợp trước khi nó xử lý một lệnh. Sử dụng cách tiếp cận của Jonathan để xử lý thời gian chờ (làm cho chúng trở thành sự kiện trong và của chính bản thân họ) làm cho nó có thể phát lại "thời gian". –

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