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