Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            EventHubClient client       = EventHubClient.CreateFromConnectionString(connectionString, eventHubName);
            List <string>  countResults = new List <string>();

            countResults.Add(eventHubName);

            for (int partitionId = 0; partitionId < partitonCount; partitionId++)
            {
                PartitionRuntimeInformation item = client.GetPartitionRuntimeInformation(partitionId.ToString());
                long count = (item.LastEnqueuedSequenceNumber - (item.BeginSequenceNumber + 1));

                string countString = "Partition: " + partitionId + ", LastEnqueuedSequenceNumber: " + item.LastEnqueuedSequenceNumber + ", BeginSequenceNumber: " + item.BeginSequenceNumber + ", Count: " + count;
                countResults.Add(countString);

                WriteOutResults(countResults);
            }
        }
 public PartitionListenerControl(WriteToLogDelegate writeToLog,
                                 Func<Task> stopLog,
                                 Action startLog,
                                 string iotHubConnectionString,
                                 string consumerGroupName)
 {
     Task.Factory.StartNew(AsyncTrackEventData).ContinueWith(t =>
     {
         if (t.IsFaulted && t.Exception != null)
         {
             writeToLog(t.Exception.Message);
         }
     });
     this.iotHubConnectionString = iotHubConnectionString;
     this.writeToLog = writeToLog;
     this.stopLog = stopLog;
     this.startLog = startLog;
     serviceBusHelper = new ServiceBusHelper(writeToLog);
     eventHubClient = EventHubClient.CreateFromConnectionString(iotHubConnectionString, "messages/events");
     consumerGroup = string.Compare(consumerGroupName,
                                    DefaultConsumerGroupName,
                                    StringComparison.InvariantCultureIgnoreCase) == 0
                                    ? eventHubClient.GetDefaultConsumerGroup()
                                    : eventHubClient.GetConsumerGroup(consumerGroupName);
     IList<string> partitionIdList = new List<string>(eventHubClient.GetRuntimeInformation().PartitionIds);
     foreach (var id in partitionIdList)
     {
         partitionRuntumeInformationList.Add(eventHubClient.GetPartitionRuntimeInformation(id));
     }
     partitionCount = partitionRuntumeInformationList.Count;
     InitializeComponent();
     InitializeControls();
     Disposed += ListenerControl_Disposed;
 }
 public PartitionListenerControl(WriteToLogDelegate writeToLog,
                                 Func<Task> stopLog,
                                 Action startLog,
                                 ServiceBusHelper serviceBusHelper,
                                 ConsumerGroupDescription consumerGroupDescription,
                                 IEnumerable<PartitionDescription> partitionDescriptions)
 {
     Task.Factory.StartNew(AsyncTrackEventData).ContinueWith(t =>
     {
         if (t.IsFaulted && t.Exception != null)
         {
             writeToLog(t.Exception.Message);
         }
     });
     this.writeToLog = writeToLog;
     this.stopLog = stopLog;
     this.startLog = startLog;
     this.serviceBusHelper = serviceBusHelper;
     eventHubDescription = serviceBusHelper.NamespaceManager.GetEventHub(consumerGroupDescription.EventHubPath);
     eventHubClient = EventHubClient.CreateFromConnectionString(GetAmqpConnectionString(serviceBusHelper.ConnectionString),
                                                                                        consumerGroupDescription.EventHubPath);
     consumerGroup = string.Compare(consumerGroupDescription.Name,
                                    DefaultConsumerGroupName,
                                    StringComparison.InvariantCultureIgnoreCase) == 0
                                    ? eventHubClient.GetDefaultConsumerGroup()
                                    : eventHubClient.GetConsumerGroup(consumerGroupDescription.Name);
     IList<string> partitionIdList = partitionDescriptions.Select(pd => pd.PartitionId).ToList();
     foreach (var id in partitionIdList)
     {
         partitionRuntumeInformationList.Add(eventHubClient.GetPartitionRuntimeInformation(id));
     }
     partitionCount = partitionRuntumeInformationList.Count;
     InitializeComponent();
     InitializeControls();
     Disposed += ListenerControl_Disposed;
 }
        public async void ReceiveEventDataAsync(DateTime startTime)
        {
            _infoLogger.Info("Starting retrieve data from IoT Hub......");
            _eventHubReceiverList = new List <EventHubReceiver>();
            _eventHubClient       = EventHubClient.CreateFromConnectionString(SettingsManager.EventHubConnectionString);
            _infoLogger.Info("Created EventHubClient from IoTHub connection string.");
            _eventHubPartitionsCount = _eventHubClient.GetRuntimeInformation().PartitionCount;
            string[] partitionIds = _eventHubClient.GetRuntimeInformation().PartitionIds;
            _infoLogger.Info("Get EventHubClient partition informations.");
            try
            {
                // Crate event hub receviers by partition id.
                foreach (string pId in partitionIds)
                {
                    if (-1 < _eventHubClient.GetPartitionRuntimeInformation(pId).LastEnqueuedSequenceNumber)
                    {
                        // Receive data from startTime
                        _eventHubReceiverList.Add(_eventHubClient.GetDefaultConsumerGroup().CreateReceiver(pId, startTime));
                        _infoLogger.InfoFormat("{0}: Partition {1} has queued data.Getting ready to retrieve data.", startTime, pId);
                    }
                }
                // Retrieve event data from partitions.
                _infoLogger.InfoFormat("Begin retrieve histrical data from IoT Hub.");
                List <EventData> dataList = new List <EventData>();
                // Retrieve histrical data.
                foreach (EventHubReceiver recv in _eventHubReceiverList)
                {
                    dataList.AddRange(
                        await recv.ReceiveAsync(int.MaxValue - 1, TimeSpan.FromSeconds(20)));
                    _infoLogger.InfoFormat("Collected historical data from EventHubReceiver {0}.", recv.Name);
                }
                long historicalCount = 0;
                foreach (EventData data in dataList)
                {
                    // Send event data to NS service port UDP port for decrypt.
                    var enqueuedTime = data.EnqueuedTimeUtc.ToLocalTime();
                    _infoLogger.InfoFormat("Time: {0}\t Data Received: {1}",
                                           enqueuedTime.ToString(), Convert.ToBase64String(data.GetBytes()));
                    await _UDPConnector.SendAsync(data.GetBytes());

                    historicalCount++;
                }
                _infoLogger.InfoFormat("Totally sent {0} messages to UDP port.", historicalCount);
                _infoLogger.InfoFormat("End retrieve histrical data from IoT Hub.");
                List <EventData> currentDataList = null;
                long             currenctCount   = 0;
                _infoLogger.InfoFormat("Begin retrieve current data from IoT Hub.");
                while (true)
                {
                    currentDataList = new List <EventData>();
                    foreach (EventHubReceiver recv in _eventHubReceiverList)
                    {
                        currentDataList.AddRange(await recv.ReceiveAsync(int.MaxValue, TimeSpan.FromSeconds(1)));
                        _infoLogger.InfoFormat("Collected current data from EventHubReceiver {0}.", recv.Name);
                    }

                    foreach (EventData data in currentDataList)
                    {
                        // Send event data to NS service port UDP port for decrypt.
                        var enqueuedTime = data.EnqueuedTimeUtc.ToLocalTime();
                        await _UDPConnector.SendAsync(data.GetBytes());

                        currenctCount++;
                    }
                    _infoLogger.InfoFormat("This loop has been sent {0} messages to UDP port.", currenctCount);
                    // clear all.
                    currenctCount   = 0;
                    currentDataList = null;
                }
            }
            catch (Exception ex)
            {
                _errorLogger.ErrorFormat("ReceiveEventDataAsync got an error when retrieve data from IoT Hub:{0}",
                                         ex.ToString().Replace("\r\n", " "));
                try
                {
                    _infoLogger.InfoFormat("Now reconnecting IoT Hub.");
                    // If IoTHub disconnected then reconnect.
                    await CloseAsync();

                    ReceiveEventDataAsync(DateTime.Now);
                }
                catch
                {
                }
            }
            _infoLogger.InfoFormat("End retrieve current data from IoT Hub.");
        }