Dalam sistem pengiriman email transaksi (OTP / Invoice), keandalan layanan adalah hal utama. Aplikasi harus mencoba mengirimkan email via Primary Provider (SendGrid). Jika SendGrid mengalami error (misal maintenance/downtime), sistem harus otomatis fallback ke Secondary Provider (Mailgun) secara transparan.
Endpoint:
POST /notifications/send
{
"to": "user@example.com",
"subject": "Kode OTP Anda",
"body": "Kode OTP: 492019",
"forcePrimaryError": false
}
{
"status": "SENT",
"provider": "SendGrid",
"messageId": "MSG_SG_1002"
}
to, subject, atau body kosong → HTTP 400 "Missing required email fields".forcePrimaryError === true (simulasi SendGrid down), gagal dengan error 500 dan masuk ke fallback.HTTP 200 dengan { status: "SENT", provider: "SendGrid", messageId: "SG_" + Date.now() }.HTTP 200 dengan { status: "SENT", provider: "Mailgun", messageId: "MG_" + Date.now() }.forcePrimaryError === true & forceSecondaryError === true), kembalikan HTTP 503 "All email providers unavailable".Pola Circuit Breaker pada Microservices Di bagian komentar kode solusi Anda, jelaskan 3 status Circuit Breaker (CLOSED, OPEN, HALF-OPEN) untuk mengisolasi kegagalan service dependen.