Exemplo n.º 1
0
        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));
        }