2013-08-15 35 views
5

Mặc dù tôi đã đọc mãnh liệt về tính toàn vẹn giao dịch trên NEventStore, tôi không thể nắm bắt được cách NEventStore thực sự mở rộng khi có nhiều phiên bản của NEventStore có dây.NEventStore: Cách điều phối các sự kiện không thể so sánh được?

Để tóm tắt sự hiểu biết của tôi, Sự kiện được thêm vào cam kết là không thể chia sẻ, sau đó nó xuất bản cho người điều phối và sau đó được đánh dấu là đã gửi đi.

Đồng thời, bất cứ khi nào bạn kết nối NEventStore, nó sẽ tìm kiếm các sự kiện không được tán thành, sau đó gửi đi và đánh dấu sự kiện là được gửi đi.

Nhưng sau đó phải có khoảng thời gian ngắn khi kết nối một cửa hàng sự kiện mới sẽ thấy các sự kiện không được sắp xếp sắp được gửi đi (từ các cửa hàng khác). Cửa hàng sự kiện mới sẽ gửi lại các sự kiện.

Hãy suy nghĩ về kiến ​​trúc này:

Client -> Command Bus -> Command Handler -> EventStore persist -> Dispatch to Event Handlers

Nếu chúng tôi có nhiều Command Handlers để xử lý tải của chúng tôi, chúng tôi cũng sẽ kiên trì nhiều sự kiện.

Nếu chúng tôi thường xử lý hoặc tạo Command Handlers, thì nhiều EventStores sẽ được kết nối và gửi đi các sự kiện đã được gửi đi.

Tôi hiểu rằng người tiêu dùng của người điều phối phải là không có tính chất riêng, đó không phải là vấn đề của tôi. Vấn đề của tôi là liệu chúng tôi sẽ cung cấp một lượng tải không cần thiết cho người tiêu dùng các trình xử lý lệnh trong một tình huống tải cao?

Trả lời

2

Câu hỏi này thực sự cũ, nhưng khi tôi chỉ vấp phải nó, tôi sẽ thêm hai xu của mình: Tôi không nghĩ rằng bạn phải kết nối một phiên bản mới của NEventStore cho mọi trường hợp của một trình xử lý lệnh . Các đối tượng NEventStore là không trạng thái, vì vậy bạn có thể sử dụng một cá thể duy nhất cho toàn bộ quá trình của bạn (hoặc AppDomain). Vì vậy, chắc chắn, nếu bạn có nhiều quy trình, mỗi quy trình sẽ tạo ra một NEventStore mới và kịch bản của bạn có thể trở thành hiện thực. Tuy nhiên, hiệu ứng có thể sẽ rất nhỏ và không cản trở khả năng mở rộng quá nhiều.

0

Theo ý kiến ​​của tôi là chấp nhận được rằng trong trường hợp này các tin nhắn được gửi đi nhiều lần. Trong thực tế cơ sở trên this doc:

Có một khả năng nhỏ trong kịch bản thất bại nơi một bộ sự kiện có thể được gửi đi nhưng chưa được đánh dấu như vậy. Điều này có thể dẫn đến kết quả là trong cùng một tập hợp thư được redispatched. Trong hệ thống theo định hướng thư, khái niệm phân phối ít nhất một lần luôn là điều mà cần được xem xét và tình trạng này không khác nhau. Thông báo người tiêu dùng phải được tạo thành không có khả năng (có khả năng bằng cách theo dõi danh sách các tin nhắn trước đây ) để tránh các thư trùng lặp đến.

Vì vậy, có, người tiêu dùng cuối cùng có thể nhận được cùng một thông điệp nhiều lần.

Nhưng như Fabian Schmied nói tôi nghĩ rằng bạn nên tạo (dây lên) neventstore chỉ một lần cho mỗi trường hợp ứng dụng, không phải cho mỗi trình xử lý lệnh.