Pertama, sistem pesan "lama" (MQ) lebih tua dalam implementasi tetapi mereka lebih baru dalam ide teknik: antrian persisten transaksional . Scala Actors dan Akka mungkin merupakan implementasi yang lebih baru tetapi dibangun di atas model Aktor konkurensi yang lebih lama.
Namun kedua model tersebut akhirnya menjadi sangat mirip dalam praktiknya karena keduanya berbasis pesan acara: Lihat jawaban saya untuk RabbitMQ vs Akka .
Jika Anda akan membuat kode hanya untuk JVM maka Akka mungkin adalah pilihan yang baik. Jika tidak, saya akan menggunakan RabbitMQ.
Juga jika Anda seorang pengembang Scala, maka Akka seharusnya tidak punya otak. Namun binding Java Akka tidak terlalu mirip dengan Java dan memerlukan casting karena sistem tipe Scala.
Juga di Java orang biasanya tidak membuat objek yang tidak berubah yang saya sarankan Anda lakukan untuk pengiriman pesan. Akibatnya sangat mudah di Java untuk secara tidak sengaja melakukan sesuatu menggunakan Akka yang tidak akan diskalakan (menggunakan objek yang bisa berubah untuk pesan, mengandalkan status panggilan balik penutupan yang aneh). Dengan MQ hal ini tidak menjadi masalah karena pesan selalu berseri dengan mengorbankan kecepatan. Dengan Akka mereka umumnya tidak.
Akka juga berskala lebih baik dengan jumlah konsumen yang besar daripada kebanyakan MQ. Ini karena untuk sebagian besar klien MQ (JMS, AMQP) setiap koneksi antrian memerlukan utas ... sehingga banyak antrian == banyak utas yang berjalan secara permanen. Ini terutama masalah klien. Saya pikir ActiveMQ Apollo memiliki dispatcher non-pemblokiran yang konon memperbaiki masalah itu untuk AMQP. Klien RabbitMQ memiliki saluran yang memungkinkan Anda menggabungkan banyak konsumen tetapi masih ada masalah dengan sejumlah besar konsumen yang berpotensi menyebabkan kebuntuan atau koneksi mati sehingga umumnya lebih banyak utas ditambahkan untuk menghindari masalah ini.
Yang sedang berkata remoting Akka agak baru dan mungkin masih tidak menawarkan semua jaminan pesan yang dapat diandalkan dan QoS yang disediakan antrian pesan tradisional (tapi itu berubah setiap hari). Ini juga umumnya peer-to-peer tetapi menurut saya mendukung server-to-peer yang umumnya dilakukan oleh kebanyakan sistem MQ (yaitu titik kegagalan tunggal) tetapi ada sistem MQ yang peer-to-peer (RabbitMQ adalah server- to-peer).
Akhirnya RabbitMQ dan Akka benar-benar pasangan yang bagus. Anda dapat menggunakan Akka sebagai pembungkus RabbitMQ terutama karena RabbitMQ tidak membantu Anda menangani konsumsi pesan dan merutekan pesan secara lokal (dalam satu JVM).
Kapan memilih Akka
- Punya banyak konsumen (pikirkan jutaan).
- Butuh latensi rendah
- Terbuka untuk model konkurensi Aktor
Sistem contoh: Sistem obrolan waktu nyata interaktif
Kapan memilih MQ
- Perlu berintegrasi dengan banyak sistem yang berbeda (yaitu non JVM)
- Keandalan pesan lebih penting daripada latensi
- Ingin lebih banyak alat dan UI admin
- Karena poin sebelumnya lebih baik untuk tugas yang berjalan lama
- Ingin menggunakan model konkurensi yang berbeda dari Aktor
Contoh sistem: Sistem pemrosesan batch transaksional terjadwal
EDIT berdasarkan komentar yang bersangkutan
Saya membuat asumsi bahwa OP terkait dengan pemrosesan terdistribusi yang dapat ditangani oleh Akka dan Antrean Pesan. Artinya saya berasumsi dia berbicara tentang didistribusikan Akka . Menggunakan Akka untuk konkurensi lokal adalah perbandingan apel dengan oranye untuk sebagian besar antrean pesan . Saya katakan paling karena Anda dapat menerapkan model antrian pesan secara lokal sebagai model konkurensi (yaitu topik, antrian, pertukaran) yang dilakukan oleh perpustakaan Reaktor dan simple-react .
Memilih model / library konkurensi yang tepat sangat penting untuk aplikasi berlatensi rendah. Solusi pemrosesan terdistribusi seperti antrian pesan umumnya tidak ideal karena perutean hampir selalu dilakukan melalui kabel yang jelas lebih lambat daripada dalam aplikasi dan dengan demikian Akka akan menjadi pilihan yang lebih baik. Namun saya yakin beberapa teknologi MQ berpemilik memungkinkan perutean lokal. Juga seperti yang saya sebutkan sebelumnya, sebagian besar klien MQ cukup bodoh tentang threading dan tidak bergantung pada IO non-pemblokiran dan memiliki utas per koneksi / antrian / saluran ... ironisnya io non-pemblokiran tidak selalu latensi rendah tetapi umumnya lebih banyak sumber daya efisien.
Seperti yang Anda lihat topik pemrograman terdistribusi dan pemrograman bersamaan agak besar dan berubah setiap hari sehingga niat awal saya tidak membingungkan tetapi lebih fokus pada satu area tertentu dari pemrosesan pesan terdistribusi yang saya pikirkan tentang OP. Dalam hal konkurensi, seseorang mungkin ingin memfokuskan pencarian mereka pada pemrograman "reaktif" (RFP / stream) yang merupakan model "lebih baru" tetapi serupa dengan model aktor dan model antrian pesan yang semua model ini dapat digabungkan secara umum karena keduanya berbasis acara.