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?