簡體   English   中英

是否可以關聯 MassTransit Saga 中不基於 ID 的消息?

[英]Is it possible to to correlate a message in MassTransit Saga that is not based on a ID?

是否可以將傳入消息與沒有 1 對 1 關聯的 Id 或屬性的 saga 匹配? 我正在考慮做類似以下的事情,但CorrelateBy似乎並沒有滋潤傳奇或觸發任何處理。

    public interface SubmitOrder
    {
        Guid OrderId { get; }

        string[] ItemIds { get; }
    }

    public interface ItemStockExhausted
    {
        string Id { get; }
    }

    public class OrderState :
        SagaStateMachineInstance
    {
        public Guid CorrelationId { get; set; }

        public string[] ItemIds { get; set; }

        public int CurrentState { get; set; }
    }

    public class OrderStateMachine :
        MassTransitStateMachine<OrderState>
    {
        public OrderStateMachine()
        {
            InstanceState(x => x.CurrentState);
            Event(() => SubmitOrder, x
                => x.CorrelateById(context => context.Message.OrderId)
            );

            Event(() => ItemStockExhausted, x
                => x.CorrelateBy((state, context) => state.ItemIds.Contains(context.Message.Id))
            );

            Initially(
                When(SubmitOrder)
                    .Then(x => x.Instance.ItemIds = x.Data.ItemIds)
                    .TransitionTo(Submitted));

            During(Submitted,
                When(ItemStockExhausted)
                    .Then(x => { /* Do something */ })
                    );
        }

        public Event<SubmitOrder> SubmitOrder { get; private set; }

        public Event<ItemStockExhausted> ItemStockExhausted { get; private set; }

        public State Submitted { get; private set; }
    }

不確定它是否有任何區別,但我正在使用 MongoDB 持久性。

對於支持查詢的 Saga 持久性提供程序,可以通過查詢進行關聯。 MongoDB 持久性提供程序支持使用查詢,但您需要記住,不是 LINQ 查詢可以正確轉換為 MongoDB 查詢。

在您的情況下,我建議啟用 MongoDB 查詢跟蹤,就像在這個問題中建議的那樣: How do I log my queries in MongoDB C# Driver 2.0?

一些持久化提供者,特別是那些使用像 Redis 這樣的鍵值數據庫的持久化提供者,不支持查詢關聯,但他們通常會在您嘗試使用查詢時立即拋出“不支持”異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM