Tôi đang có câu hỏi liên quan đến cập nhật cho nhiều tập hợp trong một giao dịch sử dụng JOliver's Event Store. Theo tôi hiểu, mọi tập hợp đều phải có luồng sự kiện riêng. Bây giờ, trong khi nhiều trình xử lý lệnh sẽ chỉ tải một tổng hợp duy nhất và chỉ cập nhật tổng hợp đó (tức là lưu sự kiện cho những tập hợp đó), tôi có thể tưởng tượng rằng sẽ có các trình xử lý lệnh cần cập nhật nhiều tập hợp. Và tất nhiên, tôi muốn làm điều đó một cách giao dịch.Cập nhật nhiều tập hợp bằng cách sử dụng JOliver EventStore
Tuy nhiên, tôi không thấy cách tôi có thể làm điều đó với Cửa hàng sự kiện. Lưu trữ các sự kiện được thực hiện bằng cách gọi CommitChanges()
trên luồng sự kiện. Nếu chúng tôi đang có nhiều tập hợp để cập nhật, sẽ có nhiều luồng sự kiện và do đó có nhiều cuộc gọi đến CommitChanges()
. Cách duy nhất để thực hiện giao dịch đó là bọc nó trong một TransactionScope
, nhưng điều đó không có ý nghĩa nhiều, vì công nghệ lưu trữ cơ bản có thể không hỗ trợ các giao dịch. Vì vậy, tôi kết thúc với mã này, mà chắc chắn là không phải những gì tôi đang tìm kiếm:
Guid aggregateGuid1 = Guid.NewGuid();
Guid aggregateGuid2 = Guid.NewGuid();
Guid commitGuid = Guid.NewGuid();
var stream = store.OpenStream(aggregateGuid1, 0, int.MaxValue);
stream.Add(new EventMessage() { Body = new MonitorDisabled { MonitorGuid = aggregateGuid1, User = "A" } });
stream.CommitChanges(commitGuid);
stream = store.OpenStream(aggregateGuid2, 0, int.MaxValue);
stream.Add(new EventMessage() { Body = new MonitorEnabled { MonitorGuid = aggregateGuid2, User = "B" } });
// Can't commit twice with the same commit id, what if fails after first one? No way for the store to know it had to write the second part of the commit.
stream.CommitChanges(commitGuid);
này khiến tôi cảm thấy tôi là hoàn toàn thiếu một cái gì đó về cách thức tổ chức sự kiện Store nên được sử dụng. Ai có thể giúp tôi ở đây? Cảm ơn rất nhiều!
Bây giờ, giả sử chúng ta đang ở trong lưu trữ doanh nghiệp và chúng tôi đang quản lý các máy chủ trong các phòng ở các trung tâm dữ liệu. Và mỗi máy chủ được giám sát bởi một bộ màn hình, chúng ta hãy gọi đó là một cấu hình màn hình. Bây giờ, chúng tôi muốn vô hiệu hóa màn hình trong quá trình bảo trì. Và, chúng tôi có thể thực hiện bảo trì trên máy chủ, giá đỡ, phòng hoặc trung tâm dữ liệu hoàn chỉnh. Cấu hình màn hình là một tổng hợp tự nhiên cho màn hình cho một máy chủ, chúng tôi muốn nâng cao sự kiện MonitorDisabled trên tổng hợp cấu hình màn hình khi chúng tôi đặt một rack trong bảo trì. Chúng ta xác định ranh giới TX ở đâu? Máy chủ, giá, phòng, ...? – Jochen
Nếu bạn có ranh giới phiên mã vượt qua ranh giới tổng hợp, bạn đang làm sai. Theo định nghĩa, tổng hợp là ranh giới giao dịch và mô hình của bạn nên phản ánh điều đó. –