Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }