During learn and experience

۴ مطلب با موضوع «akka» ثبت شده است

استفاده از Akka در Kotlin

زبان برنامه نویسی Kotlin به تازگی نسخه یکش عرضه شده و بنظر میرسه داره کم کم جای خودشو بین توسعه دهندگان بخصوص توسعه دهندگان روی JVM باز میکنه. اگه بخام Kotlin رو با اسکالا مقایسه کنم که بنظرم حرفی برای گفتن نداره ولی خب به نسبت جاوا امکانات خیلی بیشتری داره. مرور زمان و بزرگ شدن code base پروژه هایی که از Kotlin استفاده می کنند مشخص میکنه Kotlin تا کجاها میتونه جلو بره و محدودیت هاش چیه.

یکی از قابلیت های Kotlin تعامل (interoperability) خوب اون با کدهای جاوا است. برای همین سعی کردم یک پروژه درست کنم و از Akka java API در اون پروژه Kotlin استفاده کنم و ببینم میشه برنامه Akka با Kotlin نوشت.

پروژه کامل رو در github قرار دادم که در حد یک hello work در akka، البته کد معادل جاوا هم در پروژه وجود داره:

package hello

import akka.actor.*
import akka.dispatch.OnComplete
import akka.pattern.Patterns.ask;
import scala.concurrent.Await
import scala.concurrent.Future;
import scala.concurrent.duration.Duration
import java.util.concurrent.TimeUnit

fun main(args: Array<String>) {
    val system = ActorSystem.create("MySystem")
    val myActor = system.actorOf(Props.create(MyActor::class.java), "myActor")
    val testActor = system.actorOf(Props.create(TestActor::class.java), "testActor")

    myActor.tell("test", testActor);
    testActor.tell("ask", myActor);

}

class MyActor : UntypedActor() {

    data class Greeting(val from: String)

    object Goodbye

    override fun onReceive(message: Any?) = when (message) {
        "test" -> println("received test")
        is Greeting -> {
            println("I was greeted by " + message.from)
            sender.tell("hello " + message.from, self)
        }
        is Goodbye -> println("Someone said goodbye to me.")
        else -> println("received unknown message")
    }
}

class TestActor : UntypedActor() {
    override fun onReceive(message: Any?) {
        when (message) {
            "ask" -> {
                println("received ask")
                val future: Future<Any> = ask(sender, MyActor.Greeting("Saeed"), 5000)

                future.onComplete(object : OnComplete<Any?>() {
                    override fun onComplete(failure: Throwable?, result: Any?) {
                        if (failure != null) {
                            println("We got a failure, handle it here")
                        } else {
                            println("result = " + result as String)
                        }
                    }
                }, context.dispatcher())
            }
            else -> println("received unknown message")
        }
    }
}

همونطور که توی کد میبینید دستور when یجورایی یه switch case پیشرفته جاوا و اصلا با pattern matching اسکالا قابل مقایسه نیست. data کلاس های Kotlin کاربرد خوبی برای تعریف پیغام ها در Akka داره (از استاتیک اینر کلاس در جاوا بهتره). از monad و این چیزا هم در Kotlin خبری نیست که نشون میده اسکالا چه زبان قدرتمندیه.

استفاده از Akka Scala API در Kotlin تقریبا غیر ممکنه چون بسیاری از توابع و کلاس های اسکالا no name provided هستند.

نکته عجیب دیگه ای هم که مشاهده کردم این بود که Intellij Idea که IDE رسمی Kotlin چند تا از سینتکس های Kotlin رو نمی تونست پارس کنه و error الکی میده!

بمنظور پرسیدن سوال و تبادل نظر یک نسخه از discourse بالا آوردن که خیلی جالبه.

در نهایت فکر می کنم Kotlin هنوز جای کار داره و بنظرم در خوشبینانه ترین حالت بتونه در حد groovy رشد کنه ولی در کل تجربه خوبی بود.

۲۲ ارديبهشت ۹۵ ، ۰۰:۰۳ ۰ نظر موافقین ۲ مخالفین ۰
سعید زرین فام

Akka 2.4 ریلیز شد و از من بعنوان committer تشکر

در قسمت اخبار سایت Akka، خبر عرضه Akka 2.4 گذاشته شده و از من بعنوان committer با یک commit که ۱۰ خط اضافه کرده و ۲ خط پاک کرده تشکر کردن. 

در زمان توسعه هسته اصلی پروژه بازار آتی بورس کالای ایران در رایان که با Akka در حال پیاده سازیش هستیم که از Akka IO توش استفاده شده توی مستندات قسمت Akka IO Java یکسری مشکل بود که تو github فورک گرفتم و درست کردم و براشون فرستادم.حالا اینا مارو شرمنده کردن و اسم منو تو committer هاش آوردن واقعا دمشون گرم. من عاشق این فرهنگ دهنده بودن هستم امیدوارم یه روز تو این کارا خیلی قوی بشم.

 

۱۲ مهر ۹۴ ، ۱۷:۲۶ ۲ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

استفاده از SLF4J logback در Akka

بالاخره اولین پروژه Akka عمرم هم داره عملیاتی میشه و برای مراحل deployment چالش های جدیدی پیش روی ماست، یکی از اونها استفاده از یک logger درست حسابیه آخه Logging در Akka بصورت پیشفرض در STDOUT پرینت می شود که برای production اصلا مناسب نیست. 

 

جزئیات بیشتر رو در جواب یاب در قالب سوال و جواب مطرح کردم می تونید ببینید.

۰۷ مهر ۹۴ ، ۱۰:۲۱ ۰ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

Integrate play framework with akka cluster (java)

Integrate a play framework app (java) with akka cluster so that you can easily add new play node to scale your system. when a new node added all node in the cluster log hello message, no matter which node receives the message.

https://github.com/zarinfam/play-akka-cluster-pub-sub

پنجشنبه جمعه خوبی بود. اینم خروجیش.
۱۱ مهر ۹۳ ، ۱۹:۴۶ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام