Example #1
0
        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;
                }
            }
        }
Example #2
0
 public void SendBatch(object[] content, Action <EnvelopeBuilder> configure)
 {
     sender.SendBatch(content, b =>
     {
         DecorateEnvelope(b);
         configure(b);
     });
 }
Example #3
0
 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)));
 }