私は nServiceBus を扱っていますが、再試行して、失敗したときに別のときにメッセージを送信したいと考えています。Bus.Defer() について聞いたことがありますが、それについての私の理解は限られています。
ストックコードをチェックするシステムがあります。コマンドが呼び出されたときにチェックし、午後 8 時以降に別のチェックを再スケジュールします。
株式コードをチェックする機能を実行する CheckCurrentProductAvailabilityCommand があります。これは CurrentProductAvailabilityRequestHandler によって処理されます。
失敗した場合は、ScheduleCheckStockCodeAvailabilityProcessor によって処理されるストック コードを使用して ScheduleCheckStockAvailabilityCommand を実行します。
次に、関数 _bus.Defer(_checkStockCodeAvailability.TimeOutTime, message.StockCode); を実行します。
私の実際のコード....
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;
});
}
}
上記のコードは正常に動作します。
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);
}
}
しかし、これがどのように機能するかを論理的に考えることはできません。
何か助けはありますか?