ส่ง message ข้าม process ด้วย NetMQ (ZeroMQ)

blog-netmq

NetMQ เป็นไลบรารีในการส่ง message ข้ามโพรเซส (process) เพื่อแลกเปลี่ยนข้อมูล มีหลายวิธีในการรับส่ง ทั้งแบบ Request-Response, Publish-Subscribe หรือ Push-Pull ซึ่งในแต่ละภาษาก็จะมีไลบรารีที่ทำงานในลักษณะนี้อยู่

NetMQ นั้นเป็นไลบรารีแบบพอร์ต (native port) จาก ZeroMQ โดยใช้ภาษา C# ในที่นี้ ขอยกตัวอย่างการทำงานแบบ Publish-Subscribe หรือเรียกย่อๆว่า PubSub ซึ่งจะมีโพรเซสที่เป็นผู้ส่งข้อมูล (Publisher) กับ ผู้รับข้อมูล (Subsccriber) โดยจะใช้สื่อกลางคือ Topic เปรียบเทียบได้กับการติดตามข่าวสาร ถ้าเราสนใจหัวข้อใดๆ ก็จะไปติดตามเรื่องนั้นๆ จนกว่าจะหยุดการติดตาม หรือเทียบได้กับการปิดโพรเซสไปนั่นเอง

Topic ก็คือชื่อที่ตกลงกันล่วงหน้าระหว่าง Publisher กับ Subscriber เท่านั้น ซึ่งเราสามารถจะจัดโครงสร้างได้ด้วย เช่น ใช้สแลช ( / ) ในการระบุหัวข้อย่อย ในลักษณะเช่น “Music/Rock” โพรเซสที่ subscribe ที่ Topic “Music” จะได้รับข้อความจาก Publisher ที่ส่งมายัง Topic “Music” และ “Music/Rock”

วิธีการเขียนโปรแกรมก็ไม่มีอะไรซับซ้อนมาก ดังนี้

Continue reading

การจับ Exception จาก Task ที่ไม่ได้ catch ไว้ใน C#

slash-blog-c-exception

ในการเขียนโปรแกรมภาษา C# ให้ทำงานในเธรด (thread) ถ้าเกิดเอ็กเซ็พชัน (exception) ขึ้น จะตรวจสอบได้จาก Task.IsFaulted() ซึ่งเราต้องเก็บตัวแปรทาสค์ (task) ไว้

แต่การเขียนให้ตรวจสอบสถานะของทาสค์นั้น อาจไม่สะดวกและทำให้โปรแกรมซับซ้อน ใน C# 5.0 ขึ้นไปที่รองรับการใช้ async/await จะทำให้เขียนได้ง่ายขึ้นมาก โดยจับ exception เสมือนว่าทำงานแบบ synchronous ได้เลยดังนี้

Continue reading