public IDictionary <Guid, OutgoingState> Process(IEnumerable <BatchItem <OutgoingMessageToStore> > parameters) { try { var successfullDevices = _messagingServiceClient.Enqueue(new EnqueueMessagesDtoClient { Messages = parameters.Select(p => new EnqueueMessageDtoClient { DeviceId = p.Parameter.DeviceId, Payload = p.Parameter.Payload, TimeStamp = p.Parameter.Time, SenderDeviceId = p.Parameter.SenderDeviceId }).ToList() }); var enqueueResults = new Dictionary <Guid, OutgoingState>(); foreach (var item in parameters) { var successfull = successfullDevices.DeviceIds.Contains(item.Parameter.DeviceId); enqueueResults.Add(item.Id, successfull ? OutgoingState.Ok : OutgoingState.Fail); } return(enqueueResults); } catch (Exception ex) { Logger.Error("Devices: {0}. {1}", string.Join(",", parameters.Select(d => d.Parameter.DeviceId)), ex.ToString()); return(parameters.ToDictionary(p => p.Id, p => OutgoingState.Fail)); } }
private static void Enqueue() { var rndE = new Random(); var prevDate = DateTime.UtcNow; var prevEnci = 0; while (true) { var deviceIdSet = new HashSet <long>(); for (int i = 0; i < EnqueueBatch; i++) { deviceIdSet.Add(_deviceIds[rndE.Next(QueueSize)]); } var msgs = new EnqueueMessagesDtoClient { Messages = deviceIdSet.Select(d => new EnqueueMessageDtoClient { DeviceId = d, Payload = Enumerable.Range(1, 200).Select(i => (byte)i).ToArray(), TimeStamp = DateTime.UtcNow, SenderDeviceId = new string('1', 32) }).ToList() }; _messagingServiceClient.Enqueue(msgs); Interlocked.Increment(ref _enc); Interlocked.Add(ref _encI, msgs.Messages.Count); if (_enc % _stepSize == 0) { var now = DateTime.UtcNow; Console.WriteLine("Enqueue: " + EnqueueBatch * _enc + " perf: " + (_encI - prevEnci) * TimeSpan.FromSeconds(1).Ticks / (now - prevDate).Ticks + " msg/s"); prevDate = now; prevEnci = _encI; } Thread.Sleep(20); } }