Пример #1
0
        public IDictionary <Guid, OutgoingState> Process(IEnumerable <BatchItem <long> > deviceIds)
        {
            try
            {
                _messagingServiceClient.Commit(new DeviceListDtoClient
                {
                    DeviceIds = deviceIds.Select(d => d.Parameter).ToList()
                });

                var commitResults = new Dictionary <Guid, OutgoingState>();

                foreach (var item in deviceIds)
                {
                    commitResults.Add(item.Id, OutgoingState.Ok);
                }

                return(commitResults);
            }
            catch (Exception ex)
            {
                Logger.Error("Devices: {0}. {1}", string.Join(",", deviceIds.Select(d => d.Parameter)), ex.ToString());

                return(deviceIds.ToDictionary(p => p.Id, p => OutgoingState.Fail));
            }
        }
Пример #2
0
        private static void PeekCommitMany()
        {
            var rndD        = new Random();
            var prevDate    = DateTime.UtcNow;
            int prevDeci    = 0;
            int prevDecIAll = 0;

            while (true)
            {
                var deviceIdSet = new HashSet <long>();
                for (int i = 0; i < DequeueBatch; i++)
                {
                    deviceIdSet.Add(_deviceIds[rndD.Next(QueueSize)]);
                }

                var result = _messagingServiceClient.Peek(new DeviceListDtoClient {
                    DeviceIds = deviceIdSet.ToList()
                });
                _messagingServiceClient.Commit(new DeviceListDtoClient
                {
                    DeviceIds = result.Messages.Select(m => m.DeviceId).ToList()
                });

                Interlocked.Increment(ref _dec);
                Interlocked.Add(ref _decI, result.Messages.Count);
                Interlocked.Add(ref _decIAll, deviceIdSet.Count);

                if (_dec % _stepSize == 0)
                {
                    var now = DateTime.UtcNow;

                    Console.WriteLine("Dequeue: " + _dec + " items " + _decI + " perf: " + (_decI - prevDeci) * TimeSpan.FromSeconds(1).Ticks / (now - prevDate).Ticks + " msg/s" + " perf all: " + (_decIAll - prevDecIAll) * TimeSpan.FromSeconds(1).Ticks / (now - prevDate).Ticks + " msg/s");

                    prevDate    = now;
                    prevDeci    = _decI;
                    prevDecIAll = _decIAll;
                    Thread.Sleep(100);
                }
            }
        }