Kami menggunakan semacam pendekatan layanan mikro di aplikasi kami (meskipun tidak benar-benar dipatuhi secara konsekuen).
Ketika layanan turun atau melempar pengecualian, pendekatannya adalah memasukkannya ke dalam antrian (ActiveMQ), dan coba lagi ketika layanan lagi.
Apakah ini solusi "standar"? Atau haruskah itu dihindari karena alasan tertentu?
Atau adakah solusi yang lebih baik, atau alternatif untuk masalah ini?
microservices
message-queue
pengguna140547
sumber
sumber
Jawaban:
Dengan asumsi Anda dapat membuat panggilan Anda tidak sinkron (Anda tidak perlu mendapatkan respons dari layanan untuk melanjutkan), melakukan hal itu sering kali merupakan ide yang baik.
Ini memungkinkan layanan panggilan untuk terus bekerja tanpa penundaan (atau kesalahan langsung) yang disebabkan oleh panggilan layanan lainnya. Ini memungkinkan Anda untuk memiliki logika coba lagi yang lebih kompleks dan untuk menyebarkan beban lebih merata dari waktu ke waktu.
Untuk banyak kasus, Anda bisa mendapatkan lebih banyak dari itu dengan menyerah pada jaminan pemesanan yang diberikan oleh antrian dan beralih ke Kafka atau broker pesan asinkron lainnya. Hermes menyediakan REST API yang lebih nyaman di atas Kafka.
sumber
Ini adalah pendekatan yang buruk menurut saya. kamu juga harus
Selalu berkomunikasi melihat antrian: Aplikasi Anda seharusnya tidak mengharapkan respons segera dan karenanya proses pekerja tidak harus 100% tersedia
Selalu gunakan komunikasi gaya RPC. Muat permintaan keseimbangan di beberapa instance layanan: Jika suatu layanan salah, yang lain akan menjawab permintaan tersebut, sehingga Anda memiliki waktu aktif 100%
Memiliki alur, layanan panggilan, mendapatkan kesalahan, tempat dalam antrian, ingat untuk memeriksa antrian untuk balasan ke beberapa pesan saya untuk tetapi tidak semuanya. sudah terlalu rumit.
sunting: terlalu rumit karena Anda harus memprogram sinkronisasi dan gaya komunikasi asink daripada hanya satu atau yang lain.
sumber