using Microsoft.Extensions.Configuration; using RabbitMQ.Client; using RabbitMQ.Client.Events; using System.Text; using System.Text.Json; using System.Text.Json.Serialization; var basePath = Directory.GetCurrentDirectory(); var configuration = new ConfigurationBuilder() .SetBasePath(basePath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); WriteToConsole("Consumer Start!"); var host = configuration["Rabbit:Host"] ?? ""; var user = configuration["Rabbit:User"] ?? ""; var pass = configuration["Rabbit:Password"] ?? ""; var queue = configuration["Rabbit:Queue"] ?? "basic-queue"; // create connection var factory = new ConnectionFactory() { //Uri = new Uri("amqp://admin:P@ssw0rd@192.168.4.11:5672") HostName = host,// หรือ hostname ของ RabbitMQ Server ที่คุณใช้ UserName = user, // ใส่ชื่อผู้ใช้ของคุณ Password = pass // ใส่รหัสผ่านของคุณ }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); //channel.QueueDeclare(queue: "bma-checkin-queue", durable: true, exclusive: false, autoDelete: false, arguments: null); channel.QueueDeclare(queue: queue, durable: true, exclusive: false, autoDelete: false, arguments: null); var consumer = new EventingBasicConsumer(channel); consumer.Received += async (model, ea) => { var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); await CallRestApi(message); // convert string into object //var request = JsonConvert.DeserializeObject(message); //using (var db = new ApplicationDbContext()) //{ // var item = new AttendantItem // { // Name = request.Name, // CheckInDateTime = request.CheckInDateTime, // }; // db.AttendantItems.Add(item); // db.SaveChanges(); // WriteToConsole($"ได้รับคำขอจาก Queue: {message}"); // WriteToConsole($"ตอบกลับจาก REST API: {JsonConvert.SerializeObject(item)}"); //} WriteToConsole($"ได้รับคำขอจาก Queue: {message}"); //WriteToConsole($"ตอบกลับจาก REST API: {JsonConvert.SerializeObject(item)}"); }; //channel.BasicConsume(queue: "bma-checkin-queue", autoAck: true, consumer: consumer); channel.BasicConsume(queue: queue, autoAck: true, consumer: consumer); //Console.WriteLine("\nPress 'Enter' to exit the process..."); await Task.Delay(-1); static void WriteToConsole(string message) { Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} : {message}"); } async Task CallRestApi(string requestData) { using var client = new HttpClient(); var apiPath = $"{configuration["API"]}/leave/process-check-in"; var content = new StringContent(requestData, Encoding.UTF8, "application/json"); var response = await client.PostAsync(apiPath, content); if (response.IsSuccessStatusCode) { var responseContent = await response.Content.ReadAsStringAsync(); WriteToConsole(responseContent); } else { var errorMessage = await response.Content.ReadAsStringAsync(); var res = JsonSerializer.Deserialize(errorMessage); WriteToConsole($"Error: {res.Message}"); } } public class ResponseObject { [JsonPropertyName("status")] public int Status { get; set; } [JsonPropertyName("message")] public string? Message { get; set; } [JsonPropertyName("result")] public object? Result { get; set; } } public class CheckTimeDtoRB { public Guid? CheckInId { get; set; } public double Lat { get; set; } = 0; public double Lon { get; set; } = 0; public string POI { get; set; } = string.Empty; public bool IsLocation { get; set; } = true; public string? LocationName { get; set; } = string.Empty; public string? Remark { get; set; } = string.Empty; public Guid? UserId { get; set; } public DateTime? CurrentDate { get; set; } public string? CheckInFileName { get; set; } public byte[]? CheckInFileBytes { get; set; } }