/// <summary> /// Process a group of messages in a thread. /// </summary> /// <param name="configuration">Event Hub information</param> /// <param name="messages">List of messages to process</param> public static void ProcessMessages(EventHubConfiguration configuration, IEnumerable <ThroughputMessage> messages) { EventHubThreadData data = new EventHubThreadData() { Configuration = configuration, Messages = messages }; System.Threading.ThreadPool.QueueUserWorkItem(UploadMessages, data); }
/// <summary> /// Thread routine that uploads a group of messages to the event hub /// </summary> /// <param name="threadData">Instance of EventHubThreadData</param> private static void UploadMessages(object threadData) { EventHubThreadData data = threadData as EventHubThreadData; try { if (data.Configuration != null && !String.IsNullOrEmpty(data.Configuration.EventHubName) && !String.IsNullOrEmpty(data.Configuration.ServiceBusConnectionString)) { if (EventHubUtility.Client == null) { lock (ThreadLock) { EventHubUtility.Client = EventHubClient.CreateFromConnectionString( data.Configuration.ServiceBusConnectionString, data.Configuration.EventHubName); } } List <EventData> batchList = new List <EventData>(); foreach (ThroughputMessage msg in data.Messages) { batchList.Add(new EventData(Encoding.UTF8.GetBytes(msg.ToString()))); } lock (EventHubUtility.ThreadLock) { EventHubUtility.Client.SendBatchAsync(batchList); } } } catch (Exception ex) { lock (EventHubUtility.ThreadLock) { if (EventHubUtility.Client != null) { EventHubUtility.Client.Close(); } EventHubUtility.Client = null; } } }