Task IFilter <ConsumeContext <TMessage> > .Send(ConsumeContext <TMessage> context, IPipe <ConsumeContext <TMessage> > next) { context.GetOrAddPayload <MessageRedeliveryContext>(() => { var provider = new ActiveMqScheduleMessageProvider(context); return(new ActiveMqMessageRedeliveryContext <TMessage>(context, new MessageScheduler(provider))); }); return(next.Send(context)); }
IMessageScheduler CreateMessageScheduler() { if (_context.TryGetPayload <IMessageScheduler>(out var scheduler)) { return(scheduler); } var provider = new ActiveMqScheduleMessageProvider(_context); return(new MessageScheduler(provider, _context.GetPayload <IBusTopology>())); }
/// <summary> /// Defers the message for redelivery using a delayed exchange. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="context"></param> /// <param name="delay"></param> /// <param name="callback"></param> /// <returns></returns> public static Task Defer <T>(this ConsumeContext <T> context, TimeSpan delay, Action <ConsumeContext, SendContext> callback = null) where T : class { if (!context.TryGetPayload(out IMessageScheduler scheduler)) { var provider = new ActiveMqScheduleMessageProvider(context); scheduler = new MessageScheduler(provider); } MessageRedeliveryContext redeliveryContext = new ActiveMqMessageRedeliveryContext <T>(context, scheduler); return(redeliveryContext.ScheduleRedelivery(delay, callback)); }