วิธีเริ่มต้นกับ Akka.Net

Akka.Net เป็นโอเพ่นซอร์สกรอบการประมวลผลแบบกระจายที่สร้างโดย Petabridge Akka.Net ช่วยให้คุณสร้างแอพพลิเคชั่นที่ปรับขนาดได้ยืดหยุ่นพร้อมกันและขับเคลื่อนด้วยเหตุการณ์โดยใช้โมเดลนักแสดง ในบทความนี้ฉันจะแนะนำแนวคิดสำคัญที่อยู่เบื้องหลัง Akka.Net พูดคุยว่าเหตุใดจึงมีประโยชน์และช่วยให้คุณเริ่มต้นทำงานกับ Akka.Net ใน C #

โมเดลนักแสดงเป็นกระบวนทัศน์การเขียนโปรแกรมที่อิงตามสถาปัตยกรรมแบบอะซิงโครนัสที่ขับเคลื่อนด้วยข้อความ ในกระบวนทัศน์นี้หน่วยพื้นฐานของการดำเนินการคือนักแสดง กระบวนทัศน์การเขียนโปรแกรมนี้เหมาะสำหรับการสร้างแอปพลิเคชันขนาดใหญ่ซับซ้อนกระจายซึ่งมีความน่าเชื่อถือสูง แต่อาจมีระดับความหน่วงแฝงที่คาดเดาไม่ได้

วิธีการเขียนโปรแกรมเชิงวัตถุใช้คลาสและอ็อบเจ็กต์เพื่อจำลองโดเมนของปัญหา เมื่อทำงานใน Akka.Net คุณใช้ตัวแสดงและข้อความเพื่อสร้างแบบจำลองปัญหาของคุณ ใน Akka.Net นักแสดงเป็นวัตถุที่มีพฤติกรรมเฉพาะบางอย่าง แม้ว่านักแสดงจะมีสถานะภายใน แต่ก็ไม่มีสถานะที่เปลี่ยนแปลงร่วมกันได้ คุณสามารถมีนักแสดงพร้อมกันหลายคนในแอปพลิเคชันของคุณโดยแต่ละคนประมวลผลการดำเนินการโดยอิสระ นักแสดงระบุตามที่อยู่ พวกเขาได้มาจากคลาส ActorBase และพวกเขาสามารถสร้างนักแสดงเด็กได้

นักแสดงสื่อสารกันโดยส่งข้อความแบบอะซิงโครนัส โดยพื้นฐานแล้วนักแสดงจะได้รับข้อความและตอบสนองต่อข้อความนั้นโดยการประมวลผลหรือส่งข้อความอื่นไปยังนักแสดงคนอื่นเพื่อให้งานสำเร็จ โปรดทราบว่าข้อความใน Akka.Net จะถูกประมวลผลตามลำดับทีละรายการตามลำดับที่มาถึง เนื่องจากนักแสดงสามารถรันในเครื่องหรือบนเซิร์ฟเวอร์ระยะไกลได้จึงจำเป็นต้องใช้รูปแบบการแลกเปลี่ยนข้อความทั่วไป ข้อความ Akka.Net ไม่เปลี่ยนรูป อาจเป็นอินสแตนซ์ของสตริงจำนวนเต็มหรือแม้แต่คลาสที่กำหนดเอง

มาดูกันว่าเราจะสร้างคลาสนักแสดงง่ายๆและทำงานกับข้อความได้อย่างไร ก่อนอื่นคุณควรติดตั้ง Akka.Net จาก NuGet คุณสามารถทำได้โดยพิมพ์คำสั่งต่อไปนี้ที่พรอมต์คำสั่ง NuGet

Install-Package Akka

หรือคุณสามารถติดตั้ง Akka.Net โดยใช้หน้าต่าง NuGet package manager จากภายใน Visual Studio IDE

โปรดทราบว่าคลาสนักแสดงที่กำหนดเองใน Akka.Net ควรมาจากUntypedActorคลาสซึ่งขยายActorBaseคลาสของเฟรมเวิร์ก Akka.Net นี่คือโครงสร้างของคลาสนักแสดงที่กำหนดเองใน Akka.Net ควรมีลักษณะอย่างไร

คลาสสาธารณะ ThisIsACustomActor: UntypedActor

    {

        ป้องกันการลบล้างโมฆะ PreStart ()

        {

            // คุณสามารถเขียนโค้ดเริ่มต้นได้ที่นี่

        }

        มีการป้องกันแทนที่โมฆะ PreRestart (เหตุผลข้อยกเว้นข้อความวัตถุ)

        {

        }

        มีการป้องกันแทนที่โมฆะ OnReceive (ข้อความวัตถุ)

        {         

           // วิธีนี้ใช้เพื่อจัดการกับข้อความ

        }

        มีการป้องกันแทนที่โมฆะ PostStop ()

        {

            // นี่คือที่ที่คุณสามารถเขียนโค้ดล้างข้อมูล

            // วิธีนี้จะถูกเรียกเมื่อนักแสดงหยุดและไม่ได้รับข้อความอีกต่อไป

        }

        การป้องกันแทนที่โมฆะ PostRestart (เหตุผลข้อยกเว้น)

        {

        }

    }

คุณไม่จำเป็นต้องลบล้างวิธีการเหล่านี้ทั้งหมด เพื่อความเรียบง่ายเราจะลบล้างเฉพาะOnReceiveวิธีการสร้างคลาสนักแสดงแบบกำหนดเองที่มีฟังก์ชันน้อย BasicActorโค้ดต่อไปนี้สร้างคลาสที่นักแสดงชื่อที่กำหนดเอง

BasicActor คลาสสาธารณะ: UntypedActor

    {

        มีการป้องกันแทนที่โมฆะ OnReceive (ข้อความวัตถุ)

        {

            ถ้า (ข้อความเป็นสตริง)

            {

                var msg = ข้อความเป็นสตริง;

                Console.WriteLine (ข้อความ);

            }

        }

    }

ในการสร้างตัวอย่างของนักแสดงคุณควรใช้ประโยชน์จากAkka.Actor.ActorSystemชั้นเรียน ActorSystemอาจจะกำหนดเป็นคอลเลกชันลำดับชั้นของนักแสดงที่มีการกำหนดค่าเหมือนกัน ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้างอินสแตนซ์ของBasicActorชั้นเรียนของเราจากนั้นส่งข้อความไปยังคลาสนั้น

โมฆะคงที่หลัก (สตริง [] args)

        {

            varctorSystem = ActorSystem.Create (“ ActorSystem”);

            var basicActor = ActorSystem.ActorOf ();

            basicActor.Tell (“ Hello World!”);

            Console.ReadLine ();

        }

ควรสังเกตที่นี่ว่าเมื่อคุณส่งข้อความถึงนักแสดงข้อความจะถูกส่งไปยังกล่องจดหมายที่เรียงตามลำดับ FIFO (เข้าก่อนออกก่อน) กล่องจดหมายจะส่งต่อข้อความไปยังOnReceiveเมธอดต่อเมื่อนักแสดงพร้อมที่จะดำเนินการเท่านั้น

นี่คือรายการรหัสที่สมบูรณ์สำหรับการอ้างอิงของคุณ

ใช้ Akka.Actor;

ใช้ระบบ;

เนมสเปซ AkkaDemo

{

    โปรแกรมชั้นเรียน

    {

        โมฆะคงที่หลัก (สตริง [] args)

        {

            varctorSystem = ActorSystem.Create (“ ActorSystem”);

            var basicActor = ActorSystem.ActorOf ();

            basicActor.Tell (“ Hello World!”);

            Console.ReadLine ();

        }

    }

    BasicActor คลาสสาธารณะ: UntypedActor

    {

       มีการป้องกันแทนที่โมฆะ OnReceive (ข้อความวัตถุ)

        {

            ถ้า (ข้อความเป็นสตริง)

            {

                var msg = ข้อความเป็นสตริง;

                Console.WriteLine (ข้อความ);

            }

        }

    }

}

เมื่อคุณเรียกใช้โปรแกรมข้างต้นข้อความ“ Hello World!” จะแสดงในหน้าต่างคอนโซล

Akka.Net เป็นตัวเลือกที่ยอดเยี่ยมเมื่อคุณต้องการการคำนวณพร้อมกันและการคำนวณแบบกระจายเนื่องจากช่วยให้คุณทำงานกับนามธรรมระดับสูงแทนเธรดและกิจวัตรร่วมได้ มีความยืดหยุ่นโดยการออกแบบและสนับสนุนการปรับสมดุลโหลดการแบ่งพาร์ติชันการกำหนดเส้นทางและการกำหนดค่าระยะไกล

ฉันจะกลับไปที่ Akka.Net ในโพสต์ในอนาคตที่นี่ ในระหว่างนี้คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Akka.Net และนางแบบนักแสดงได้โดยการสำรวจเนื้อหาที่มีอยู่ใน Bootcamp ของ Akka.Net ของ Petabridge