《通过C#学Proto.Actor模型》之Mailbox
2018-08-30 08:35
363 查看
邮箱是Actor模型的一个重要组成部分,负责接收发过来的消息,并保存起来,等待Actor处理。邮箱中维护着两种队列,一种是存系统消息,另一个是存用户消息,系统省是指Started,Stoping,Stoped之类的,用户当然指我们自定义的Actor。
另外,我们可以通过实现IMailboxStatistics接口,来获取邮箱的状态变更,并且可以有多个IMailboxStatistics实现。
码友看代码:
using Proto; using Proto.Mailbox; using System; using System.Threading.Tasks; namespace P005_Mailboxes { class Program { static void Main(string[] args) { var props = new Props() // 用道具代理返回一个IActor实例 .WithProducer(() => new MyActor()) //默认邮箱使用无界队列 .WithMailbox(() => UnboundedMailbox.Create(new MyMailboxStatistics())) // 默认的 spawner 构造 Actor, Context 和 Process .WithSpawner(Props.DefaultSpawner); //从props衍生pid,pid代理一个actor的地址 var pid = Actor.Spawn(props); //把Hello对象交给HelloActor处理 pid.Tell(new MyEntity { Message = "this is message" }); Console.ReadLine(); } } public class MyActor : IActor { public Task ReceiveAsync(IContext context) { if (context.Message is MyEntity myEntity) { Console.WriteLine(myEntity.Message); } return Actor.Done; } } public class MyEntity { public string Message { get; set; } } public class MyMailboxStatistics : IMailboxStatistics { public void MailboxEmpty() { Console.WriteLine("邮箱MailboxEmpty"); } public void MailboxStarted() { Console.WriteLine("邮箱MailboxStarted"); } public void MessagePosted(object message) { Console.WriteLine("邮箱MessagePosted:"+message); } public void MessageReceived(object message) { Console.WriteLine("邮箱MessageReceived:"+message); } } }
当消息Posted时,Started时,Received时,邮箱为空时,这些方法会被先后调用,这里可对消息作处理。
相关文章推荐
- 《通过C#学Proto.Actor模型》之Spawning
- 《通过C#学Proto.Actor模型》之PID
- 《通过C#学Proto.Actor模型》之Behaviors
- 《通过C#学Proto.Actor模型》之Persistence
- 通过C#学Proto.Actor模型》之Remote
- C#与Java通过protobuf进行网络通信过程中遇到的问题
- C#通过AMO对象模型浏览SQL SERVER 2005 SSAS角色一例
- 【protobuf进阶】通过.proto文件导出C#支持的.cs类文件
- 通过生产-消费模型了解C#线程同步
- 通过Actor模型解决C++ 并发编程的一种思维 — Theron 库简述
- C#通过AMO对象模型浏览SQL SERVER 2005 SSAS角色一例
- 老南瓜:C#通过AMO对象模型浏览SQL SERVER 2005 SSAS角色一例
- Actor 并发模型 & "不要通过共享内存来通信,而应该通过通信来共享内存"
- 老南瓜:C#通过AMO对象模型浏览SQL SERVER 2005 SSAS角色一例
- C# 通过 Renci.SshNet 实现SFTP数据传输
- C# WPF MVVM 实战 – 5- 用绑定,通过 VM 设置 View 的控件焦点
- C#实现通过程序自动抓取远程Web网页信息的代码
- c# 通过字符窜创建Xml对象,并浏览
- CLR via C# 3 读书笔记(8):第1章 CLR执行模型 — 1.8 通用语言规范
- CLR via C# 3 读书笔记(9):第1章 CLR执行模型 — 1.9 与非托管代码互操作