Saya memiliki layanan REST yang diimplementasikan dengan JAX-RS. Beberapa operasi membutuhkan waktu lama untuk diselesaikan, mungkin 15-30 menit. Untuk kasus ini, kecenderungan saya adalah mengirimkan thread latar belakang untuk memproses operasi yang berjalan lama dan kemudian segera merespons dengan status HTTP 202 DITERIMA. Responsnya akan berisi header lokasi dengan url yang dapat digunakan klien untuk melakukan polling kemajuan.
Pendekatan ini memerlukan pembuatan thread untuk menangani operasi yang berjalan lama, sehingga 202 ACCEPTED dapat segera dikembalikan. Saya juga tahu bahwa membuat utas Anda sendiri dalam wadah Java EE umumnya merupakan praktik yang buruk!
Pertanyaan saya adalah sebagai berikut:
- Apakah orang-orang setuju bahwa ini adalah pendekatan yang benar?
- Dengan asumsi itu benar, Dapatkah orang merekomendasikan solusi 'praktik yang baik' yang memungkinkan saya untuk menjalankan operasi yang berjalan lama di latar belakang dan segera kembali?
Selain itu, untuk menghindari pengelolaan thread saya sendiri, saya melihat api server asinkron JAX-RS. Sayangnya, meskipun hal ini meningkatkan throughput server, hal ini tidak memungkinkan saya untuk langsung merespons dengan ACCEPTED.
Jersey menyatakan sebagai berikut:
Note that the use of server-side asynchronous processing model will not improve the
request processing time perceived by the client. It will however increase the
throughput of the server, by releasing the initial request processing thread back to
the I/O container while the request may still be waiting in a queue for processing or
the processing may still be running on another dedicated thread. The released I/O
container thread can be used to accept and process new incoming request connections.
Bantuan apa pun dihargai. Terima kasih!