// Главный поток для формировния и отправки сообщений. // Сообщения отправляются в локальную базу и в брокер сообщений. public static void SenderThread() { ClassForRabbit rabbit = new ClassForRabbit(); ClassForDataBase db = new ClassForDataBase(); // Получить индекс последнего добавленного в локальную бд. int lastInd = db.GetLastIndexInDb(); while (true) { lastInd++; string timeNow = DateTime.Now.ToShortTimeString(); string randomText = "randomText"; string hash = "hash"; string message = String.Join("_", lastInd.ToString(), timeNow, randomText, hash); db.AddStringAnsync(timeNow, randomText, hash); Console.WriteLine("Добавлено в базу - {0}", message); //Отправить в брокер, если включен. if (rabbit.DoSend(message)) { // Добавить в базу признак, что сообщение отправлено в брокер. db.ChangeSendFlagAsync(lastInd, 1); } Thread.Sleep(2000); } }
// Поток, срабатывающий раз в 10 сек. // Проверяет наличие не отправленных сообщений из базы в брокер и отправляет их. public static void UpdateRabbit() { ClassForRabbit rabbit = new ClassForRabbit(); ClassForDataBase db = new ClassForDataBase(); List <Int32> inds; List <String> messages; while (true) { if (rabbit.GetConnection()) { Thread.Sleep(10000); Int32 ind = 0; db.GetUnSendingMEssage(out messages, out inds); Console.WriteLine("Зашел во внешний цикл, колиество неотправленных = {0}", messages.Count().ToString()); foreach (String messaage in messages) { // если сообщение отправлено, то добавить измененние в локальной базе if (rabbit.DoSend(messaage)) { db.ChangeSendFlagAsync(inds[ind], 1); } ind++; } } } }