/
ivanstrike
/
tasker
Обзор
Документация
Войти
/
ivanstrike
/
tasker
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lab4/Examples/Program.cs
161 строка
6 KB
ivanstrike
add DLQ simulation
23 дек 2025, 14:22
23 дек 2025, 14:22
e6b7124
Код
Авторство
О чём код?
using TaskerMQ.Client; using TaskerMQ.Client.Models; using Newtonsoft.Json; namespace TaskerMQ.Examples; class Program { static async Task Main(string[] args) { Console.WriteLine("TaskerMQ Client Examples"); Console.WriteLine("========================\n"); using var client = new TaskerMQClient(); try { Console.WriteLine("Connecting to RabbitMQ..."); await client.ConnectAsync(); Console.WriteLine("Connected!\n"); // Create User Console.WriteLine("1. Creating new user..."); var timestamp = DateTime.Now.ToString("HHmmss"); var createUserResponse = await client.CreateUserAsync( username: $"testuser_{timestamp}", email: $"test_{timestamp}@example.com", password: "password123" ); PrintResponse("Create User", createUserResponse); int userId = 0; if (createUserResponse.Status == "ok" && createUserResponse.Data != null) { var userData = JsonConvert.DeserializeObject<dynamic>(createUserResponse.Data.ToString()!); userId = (int)userData!.id; Console.WriteLine($"Created user with ID: {userId}"); } // Create Project Console.WriteLine("\n2. Creating project..."); var createProjectResponse = await client.CreateProjectAsync( name: "My First Project", description: "This is a test project created via RabbitMQ", userId: userId ); PrintResponse("Create Project", createProjectResponse); int projectId = 0; if (createProjectResponse.Status == "ok" && createProjectResponse.Data != null) { var projectData = JsonConvert.DeserializeObject<dynamic>(createProjectResponse.Data.ToString()!); projectId = (int)projectData!.id; Console.WriteLine($"Created project with ID: {projectId}"); } // List Projects Console.WriteLine("\n3. Listing all projects..."); var listProjectsResponse = await client.ListProjectsAsync(); PrintResponse("List Projects", listProjectsResponse); // Create Task if (projectId > 0) { Console.WriteLine("\n4. Creating task..."); var createTaskResponse = await client.CreateTaskAsync( title: "First Task", description: "This is a test task", projectId: projectId, userId: userId ); PrintResponse("Create Task", createTaskResponse); int taskId = 0; if (createTaskResponse.Status == "ok" && createTaskResponse.Data != null) { var taskData = JsonConvert.DeserializeObject<dynamic>(createTaskResponse.Data.ToString()!); taskId = (int)taskData!.id; Console.WriteLine($"Created task with ID: {taskId}"); } // List Tasks Console.WriteLine("\n5. Listing all tasks..."); var listTasksResponse = await client.ListTasksAsync(); PrintResponse("List Tasks", listTasksResponse); // Update Task if (taskId > 0) { Console.WriteLine("\n6. Updating task status..."); var updateTaskResponse = await client.UpdateTaskAsync( id: taskId, status: "InProgress" ); PrintResponse("Update Task", updateTaskResponse); } // Get Task if (taskId > 0) { Console.WriteLine("\n7. Getting task details..."); var getTaskResponse = await client.GetTaskAsync(taskId); PrintResponse("Get Task", getTaskResponse); } // Dead Letter Queue (DLQ) demonstration Console.WriteLine("\n8. Demonstrating Dead Letter Queue (DLQ)..."); var dlqStatusBefore = await client.DemonstrateDLQAsync(); PrintResponse("DLQ Status (Before)", dlqStatusBefore); // Simulate failure to trigger DLQ mechanism Console.WriteLine("\n Simulating failure (will be retried 3 times then moved to DLQ)..."); try { var failureResponse = await client.SimulateFailureAsync(); Console.WriteLine($" Unexpected success: {failureResponse.Status}"); } catch (TimeoutException) { Console.WriteLine(" ✓ Request timed out (expected - server is retrying)"); } catch (Exception ex) { Console.WriteLine($" Exception: {ex.Message}"); } // Wait for retries and DLQ processing Console.WriteLine(" Waiting 8 seconds for retry mechanism to complete..."); await Task.Delay(8000); var dlqStatusAfter = await client.DemonstrateDLQAsync(); PrintResponse("DLQ Status (After)", dlqStatusAfter); } Console.WriteLine("\n✓ All operations completed successfully!"); } catch (Exception ex) { Console.WriteLine($"\n✗ Error: {ex.Message}"); Console.WriteLine(ex.StackTrace); } Console.WriteLine("\nPress any key to exit..."); Console.ReadKey(); } static void PrintResponse(string operation, ResponseMessage response) { Console.WriteLine($"[{operation}]"); Console.WriteLine($" Status: {response.Status}"); if (response.Error != null) { Console.WriteLine($" Error: {response.Error}"); } if (response.Data != null) { var json = JsonConvert.SerializeObject(response.Data, Formatting.Indented); Console.WriteLine($" Data: {json}"); } } }