Oddzielanie wiadomości za pomocą nservicebus

Mam do czynienia z nServiceBus i chcę ponowić próbę i wysłać wiadomość w innym czasie, gdy się nie powiedzie. Słyszałem o Bus.Defer (), ale moje zrozumienie jest ograniczone.

Mam system, który sprawdza kody zapasów. Sprawdza, kiedy komenda jest wywoływana i zmienia harmonogram kolejnej kontroli po 20:00.

Mam CheckCurrentProductAvailableCommand, który uruchamia funkcję, która sprawdza kody zapasów. Jest to obsługiwane przez CurrentProductAvailableRequestHandler.

Jeśli się nie powiedzie, uruchom ScheduleCheckStockAvailableCommand z kodem zapasowym obsługiwanym przez ScheduleCheckStockCodeAvailableProcessor.

Następnie uruchamiam funkcję _bus.Defer (_checkStockCodeAvailable.TimeOutTime, message.StockCode);

Mój aktualny kod ....

if (scheduleRecheck && result.ErrorMessage.Equals("Bad Request"))
            {
                Logger.Error("Stock query for stock code '{0}' returned a 'Product Not Found' status",
                    stockcode);

                _bus.SendLocal<ScheduleCheckStockAvailabilityCommand>(cmd =>
                {
                    cmd.StockCode = stockcode;
                });
            }
        }

Powyższy kod działa poprawnie.

public class ScheduleCheckStockCodeAvailabilityProcessor : IHandleMessages<ScheduleCheckStockAvailabilityCommand>
{
    readonly ICheckStockCodeAvailability _checkStockCodeAvailability;
    readonly IBus _bus;

    public ScheduleCheckStockCodeAvailabilityProcessor(ICheckStockCodeAvailability checkStockCodeAvailability, IBus bus)
    {
        _checkStockCodeAvailability = checkStockCodeAvailability;
        _bus = bus;
    }

    public void Handle(ScheduleCheckStockAvailabilityCommand message)
    {
        _bus.Defer(_checkStockCodeAvailability.TimeOutTime, message.StockCode);
    }
}

Ale nie potrafię logicznie myśleć, jak to działa.

Jakaś pomoc?

questionAnswers(1)

yourAnswerToTheQuestion