Saat Anda menggunakan layanan web, Anda memiliki klien dan server:
- Jika server gagal, klien harus bertanggung jawab untuk menangani kesalahan.
- Ketika server bekerja kembali, klien bertanggung jawab untuk mengirimnya kembali.
- Jika server memberikan respons terhadap panggilan dan klien gagal operasi hilang.
- Anda tidak memiliki pendapat, yaitu: jika jutaan klien memanggil layanan web pada satu server dalam satu detik, kemungkinan besar server Anda akan turun.
- Anda dapat mengharapkan respons langsung dari server, tetapi Anda juga dapat menangani panggilan tidak sinkron.
Saat Anda menggunakan antrian pesan seperti RabbitMQ, Beanstalkd, ActiveMQ, IBM MQ Series, Tuxedo Anda mengharapkan hasil yang berbeda dan lebih toleran terhadap kesalahan:
- Jika server gagal, antrian tetap ada pesan (opsional, bahkan jika mesin dimatikan).
- Ketika server bekerja kembali, ia menerima pesan yang tertunda.
- Jika server memberikan respons terhadap panggilan dan klien gagal, jika klien tidak mengakui respons pesan tetap ada.
- Anda memiliki pendapat, Anda dapat memutuskan berapa banyak permintaan yang ditangani oleh server (sebut saja pekerja itu).
- Anda tidak mengharapkan respons sinkron langsung, tetapi Anda dapat menerapkan / mensimulasikan panggilan sinkron.
Antrian Pesan memiliki lebih banyak fitur, tetapi ini adalah aturan praktis untuk memutuskan apakah Anda ingin menangani sendiri kondisi kesalahan atau membiarkannya pada antrian pesan.
Sudah ada cukup banyak penelitian terbaru dalam mempertimbangkan bagaimana REST panggilan HTTP dapat menggantikan konsep antrian pesan.
Jika Anda memperkenalkan konsep proses dan tugas sebagai sumber daya, kebutuhan untuk lapisan olahpesan menengah mulai menguap.
Ex:
Suatu tugas dapat memiliki beberapa langkah untuk inisialisasi, dan suatu proses dapat mengembalikan status ketika disurvei atau POST ke URL panggilan balik saat selesai.
Ini sangat sederhana, dan menjadi sangat kuat ketika Anda menyadari bahwa Anda sekarang dapat berlangganan feed rss / atom dari semua proses dan tugas yang sedang berjalan tanpa lapisan tengah. Sistem antrian apa pun akan memerlukan semacam web front end, dan konsep ini telah membuatnya tanpa lapisan kode kustom lain.
Sumber daya Anda ada sampai Anda menghapusnya, yang berarti Anda dapat melihat informasi historis lama setelah proses dan tugas selesai.
Anda telah membangun dalam penemuan layanan, bahkan untuk tugas yang memiliki beberapa langkah, tanpa protokol yang rumit.
Penemuan layanan Anda adalah bentuk HTML - format universal dan dapat dibaca manusia.
Seluruh aliran dapat digunakan secara terprogram atau oleh manusia, menggunakan alat yang diterima secara universal. Ini didorong oleh klien, dan karenanya tenang. Setiap alat yang dibuat untuk web dapat mendorong proses bisnis Anda. Anda masih memiliki saluran pesan alternatif dengan POST secara asinkron ke larik server log yang terpisah.
Setelah Anda mempertimbangkannya sebentar, Anda duduk dan mulai menyadari bahwa REST mungkin hanya menghilangkan kebutuhan untuk antrian pengiriman pesan dan ESB sama sekali.
http://www.infoq.com/presentations/BPM-with-REST
sumber
Antrian pesan sangat ideal untuk permintaan yang mungkin membutuhkan waktu lama untuk diproses. Permintaan diantrekan dan dapat diproses secara offline tanpa memblokir klien. Jika klien perlu diberitahu tentang penyelesaian, Anda dapat memberikan cara bagi klien untuk secara berkala memeriksa status permintaan.
Antrian pesan juga memungkinkan Anda untuk meningkatkan skala waktu. Ini meningkatkan kemampuan Anda untuk menangani semburan aktivitas berat, karena pemrosesan yang sebenarnya dapat didistribusikan sepanjang waktu.
Perhatikan bahwa antrian pesan dan layanan web adalah konsep ortogonal, yaitu mereka tidak saling eksklusif. Misalnya Anda dapat memiliki layanan web berbasis XML yang bertindak sebagai antarmuka ke antrian pesan. Saya pikir perbedaan yang Anda cari adalah Antrian Pesan versus Permintaan / Tanggapan, yang terakhir adalah ketika permintaan diproses secara serempak.
sumber
Antrian pesan asinkron dan dapat mencoba beberapa kali jika pengiriman gagal. Gunakan antrian pesan jika pemohon tidak perlu menunggu jawaban.
Ungkapan "layanan web" membuat saya berpikir tentang panggilan sinkron ke komponen yang didistribusikan melalui HTTP. Gunakan layanan web jika pemohon membutuhkan respons kembali.
sumber
Saya pikir secara umum, Anda menginginkan layanan web untuk tugas pemblokiran (tugas ini harus diselesaikan sebelum kami mengeksekusi lebih banyak kode), dan antrian pesan untuk tugas yang tidak menghalangi (bisa memakan waktu cukup lama, tapi kami tidak tidak perlu menunggu untuk itu).
sumber