JMS ve Scala oyuncuları teorik bir benzerliği paylaşıyorlar ancak onların aynı problemleri mimari olarak çözdüklerini düşünmüyorlar. Aktörlerin, yarışların ve kilitlenmelerin kazara yaratılmasının genellikle daha zor olduğu paylaşılan bellek eşzamanlılığına hafif bir alternatif olması amaçlanmıştır. JMS, doğrudan mesajlaşma, yayınlama / abone olma, işlemler, EJB entegrasyonu vb. Konularını kapsayan gelişmiş bir API'dir.
Bir aktöre en yakın JMS eşdeğeri, kalıcı olmayan, işlemsel olmayan, pub / sub olmayan bir kuyrukla desteklenen mesaj odaklı bir bean olacaktır. Ben buna "basit JMS fasulyesi" diyeceğim.
Şimdi sorularınıza.
JMS, bir uygulamadan çok bir spesifikasyon olduğundan, performans hakkında konuşmak zor bir konudur. Hiçbiri-ne olursa olsun, basit JMS bean kullanırken, performansın kabaca benzer olmasını beklerim, belki de oyuncuya zaman ve bellek açısından biraz avantaj sağlar. JMS'ye pub / sub gibi yetenekler ekledikçe, işlemler vb. Performans doğal olarak daha da düşecektir, ancak o zaman elmaları portakallarla karşılaştırmaya çalışıyorsunuz.
Ölçeklenebilirliğe gelince, basit JMS çekirdekleri, aktörler ile hemen hemen aynı şekilde ölçeklenmelidir. JMS karışımına işlem eklemek, işlemlerin kapsamına bağlı olarak doğal olarak ölçeklenebilirliğe bir miktar zarar verecektir.
JMS'nin yapamadığı aktörlerin ne yaptıklarıyla ilgili daha geniş soru. Pekala, yerleşik pub alt veya işlemleri olmadan aktörler JMS'den çıkarıyor gibi görünüyor - ve genel olarak bu doğru. Ama olay şu: oyuncular o kadar az koda ihtiyaç duyuyor ki onları çok ince taneli eşzamanlılık için mutlu bir şekilde kullanabilirim. Sıradan Java kodunda "JMS'ye ve bağımlılıklarına ya da gerektirdiği kodlara vb. Bulaşmak istemiyorum, bu yüzden sadece bir iş parçacığı oluşturacağım, bir kilit kullanacağım ve bir veri yapısını paylaşacağım." Diyebilirim. Scala oyuncularıyla "Bir oyuncuyu kırbaçlayıp devam edeceğim" demem çok daha olası.
Tasarımda da felsefi bir farklılık var. Aktörlerin basit, yerleşik bir denetçi hiyerarşisi kavramı vardır. Aktörler genellikle "çökmesine izin ver" tasarımında kullanılır. Bir oyuncu herhangi bir nedenle ölürse, o oyuncuyu yeniden başlatmak, bir grup oyuncuyu öldürmek ve hepsini yeniden başlatmak veya bir grup oyuncuyu ve kendisini öldürmek gibi bu konuda ne yapılacağına karar vermekten başka bir aktör sorumludur, böylece başka bir aktör olabilir. problemle uğraşmak. Bu tür şeyler JMS'ye eklenebilir, ancak API'nin özü değildir ve bir şekilde dışarıdan yönetilmelidir.
Bu arada, JMS'nin kapsadığı alemlere daha fazla giren bir Scala oyuncu kütüphanesi için bkz. Akka . Akka, birçok ortak aktör hiyerarşi stratejisine de açıklayıcı bir yaklaşım getiriyor.