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)); } }
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); } } }