สิ่งที่แก้ไข:
autoAck: false - ไม่ ack อัตโนมัติ ต้องรอ process เสร็จก่อน Manual Ack/Nack: BasicAck เมื่อ API return success BasicNack (reject) เมื่อ API return error (401, 500, etc.) หรือ exception CallRestApi return bool - บอกว่าสำเร็จหรือล้มเหลว Better logging - แสดง status code และ error message ชัดเจนขึ้น ตอนนี้เมื่อ API return 401 หรือ error อื่น: จะ log error พร้อม status code Message จะถูก reject (ไม่ requeue) Consumer จะทำงานต่อรับ message ถัดไปเลย (ไม่ค้าง)
This commit is contained in:
parent
4e2113eef2
commit
fb3cb2aa94
1 changed files with 23 additions and 6 deletions
|
|
@ -45,17 +45,29 @@ consumer.Received += async (model, ea) =>
|
||||||
var body = ea.Body.ToArray();
|
var body = ea.Body.ToArray();
|
||||||
var message = Encoding.UTF8.GetString(body);
|
var message = Encoding.UTF8.GetString(body);
|
||||||
|
|
||||||
//WriteToConsole($"ได้รับคำขอจาก Queue: {message}");
|
WriteToConsole($"Received message: {message}");
|
||||||
|
|
||||||
await CallRestApi(message, httpClient, configuration);
|
var success = await CallRestApi(message, httpClient, configuration);
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
channel.BasicAck(ea.DeliveryTag, multiple: false);
|
||||||
|
WriteToConsole("Message processed successfully");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
channel.BasicNack(ea.DeliveryTag, multiple: false, requeue: false);
|
||||||
|
WriteToConsole("Message processing failed - message rejected");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
WriteToConsole($"Error processing message: {ex.Message}");
|
WriteToConsole($"Error processing message: {ex.Message}");
|
||||||
|
channel.BasicNack(ea.DeliveryTag, multiple: false, requeue: false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
channel.BasicConsume(queue: queue, autoAck: true, consumer: consumer);
|
channel.BasicConsume(queue: queue, autoAck: false, consumer: consumer);
|
||||||
|
|
||||||
WriteToConsole("Consumer started. Waiting for messages...");
|
WriteToConsole("Consumer started. Waiting for messages...");
|
||||||
|
|
||||||
|
|
@ -67,7 +79,7 @@ static void WriteToConsole(string message)
|
||||||
Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} : {message}");
|
Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} : {message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
static async Task CallRestApi(string requestData, HttpClient client, IConfiguration configuration)
|
static async Task<bool> CallRestApi(string requestData, HttpClient client, IConfiguration configuration)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
@ -79,26 +91,31 @@ static async Task CallRestApi(string requestData, HttpClient client, IConfigurat
|
||||||
if (response.IsSuccessStatusCode)
|
if (response.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
var responseContent = await response.Content.ReadAsStringAsync();
|
var responseContent = await response.Content.ReadAsStringAsync();
|
||||||
//WriteToConsole($"Success: {responseContent}");
|
WriteToConsole($"API Success: {responseContent}");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var errorMessage = await response.Content.ReadAsStringAsync();
|
var errorMessage = await response.Content.ReadAsStringAsync();
|
||||||
var res = JsonSerializer.Deserialize<ResponseObject>(errorMessage);
|
var res = JsonSerializer.Deserialize<ResponseObject>(errorMessage);
|
||||||
WriteToConsole($"API Error: {res?.Message ?? "Unknown error"}");
|
WriteToConsole($"API Error ({response.StatusCode}): {res?.Message ?? errorMessage}");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (HttpRequestException ex)
|
catch (HttpRequestException ex)
|
||||||
{
|
{
|
||||||
WriteToConsole($"HTTP Error: {ex.Message}");
|
WriteToConsole($"HTTP Error: {ex.Message}");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
catch (TaskCanceledException ex)
|
catch (TaskCanceledException ex)
|
||||||
{
|
{
|
||||||
WriteToConsole($"Timeout: {ex.Message}");
|
WriteToConsole($"Timeout: {ex.Message}");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
WriteToConsole($"Unexpected Error: {ex.Message}");
|
WriteToConsole($"Unexpected Error: {ex.Message}");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue