static void SendCycle <TSenderProvider, TMessage> (BatchSendingManager manager, IQueryable <TMessage> allPendingMsgs, IEnumerator <TSenderProvider> providers, IMessageSender <TSenderProvider, TMessage> MessageSender) where TSenderProvider : ISendServiceProvider where TMessage : IMessage { int allPendingCount = allPendingMsgs.Count(); if (allPendingCount == 0) { return; } IEnumerable <TMessage> pendingChunk = null; int Counter = 0; while (providers.MoveNext()) { var provider = providers.Current; pendingChunk = manager.MakeCountAcceptableByProvider(allPendingMsgs, provider); int getted = pendingChunk == null ? 0 : pendingChunk.Count(); if (getted > 0) { DateTime start = DateTime.Now; MessageSender.SendBatch(pendingChunk, provider); manager.StoreSendProviderWorkHistory(provider, start, DateTime.Now.AddMilliseconds(1), getted); manager.Logic.DeleteLazy(pendingChunk.Cast <tblMessage>().Select(x => x.tblPendingMessagesQueue)); //UPDATE DB AFTER StoreSendProviderWorkHistory somehow: manager.Logic.SaveChanges(); Counter += getted; } if (allPendingCount == Counter) { break; } } }
public void SendBatch(object[] content, Action <EnvelopeBuilder> configure) { sender.SendBatch(content, b => { DecorateEnvelope(b); configure(b); }); }
public void SendToProject(params ICommand[] commands) { _sender.SendBatch(commands, eb => eb.AddString("to-entity", "default")); }
public static void SendBatch <T>(this IMessageSender sender, IEnumerable <T> commands) { sender.SendBatch(commands.Select(x => new Envelope <T>(x))); }