邮箱是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模型》之Mailbox的更多相关文章

  1. 《通过C#学Proto.Actor模型》之 HelloWorld

    在微服务中,数据最终一致性的一个解决方案是通过有状态的Actor模型来达到,那什么是Actor模型呢? Actor是并行的计算模型,包含状态,行为,并且包含一个邮箱,来异步处理消息. 关于Actor的 ...

  2. 《通过C#学Proto.Actor模型》之Prpos

    在第一篇Proto.Actor博文中,HelloWorld的第一行真正代码是:    var props = Actor.FromProducer(() => new HelloActor()) ...

  3. 通过C#学Proto.Actor模型》之Remote

    Proto.Actor中提供了基于tcp/ip的通迅来实现Remote,可以通过其Remot实现对Actor的调用. 先来看一个极简单片的远程调用. 码友看码: 引用NuGet包 Proto.Acto ...

  4. 《通过C#学Proto.Actor模型》之Persistence

    Actor是有状态的,当每一步执行失败后,返回失败地方继续执行时,希望此时的状态是正确的,为了保证这一点,持久化就成了必要的环节了. Proto.Actor提供了三种方式执久化: Event Sour ...

  5. 《通过C#学Proto.Actor模型》之Behaviors

    Behaviors就是Actor接收到消息后可以改变处理的方法,相同的Actor,每次调用,转到不同的Actor内方法执行,非常适合按流程进行的场景.Behaviors就通过在Actor内部实例化一个 ...

  6. 《通过C#学Proto.Actor模型》之Supervision

    Supervision,字面意思是监督,是父Actor发现子Actor有异常发生后,对子Actor产用保种策略处理的机制,如果父Actor不处理,则往上传递. 子Actor发生异常后处理的策略有: R ...

  7. 《通过C#学Proto.Actor模型》之PID

    PID对象是代表Actor对象的进程,是能过Actor.Spawn(props)获取的:它有什么成员呢?既然代理Actor,首先有一个ID,标识自己是谁,Actor在Spawn时可以命名这个ID,否则 ...

  8. 《通过C#学Proto.Actor模型》之Spawning

    Props是配置Actor和实例化Actor,那实例化后,就应该访问了,Props.Actor提供了Actor.Spawn(),Actor.SpawnPrefix(),Actor.SpawnNamed ...

  9. Proto.Actor模型

    Proto.Actor模型 http://proto.actor/ https://github.com/axzxs2001/ProtoActorSample https://www.cnblogs. ...

随机推荐

  1. leetcode — binary-tree-maximum-path-sum

    /** * * Source : https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/ * * * Given a binary ...

  2. BlockingQueue 阻塞队列实现异步事件

    转载请注明出处:https://www.cnblogs.com/wenjunwei/p/10411444.html 前言 本文通过一个简单的例子,来展现如何使用阻塞队列(BlockingQueue)来 ...

  3. 【默认加入持久化机制,防止消息丢失,v0.0.3】对RabbitMQ.Client进行一下小小的包装,绝对实用方便

    RabbitMQ是一个老牌的非微软的消息队列组件,一般来说应该能满足中小型公司对消息队列生产的需求,平时我们在.NET开发环境下运用它是可能会需要RabbitMQ.Client的SDK库,此库是官网提 ...

  4. vs2017安装pygame,vs2017安装python第三方包

    vs2017有独立的python环境:所以想在vs2017开发python并使用第三方包,需要在vs2017中操作,完成第三方包的安装. 一,查看vs2017有哪些版本的python,当前使用的是哪个 ...

  5. java的常用数据结构

    Java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类. --- 1. Collect ...

  6. Html和Css学习笔记-html进阶-div与span

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 此篇博客是我的复习笔记,html和css学的时间太久了,忘得差不多了,最近要使用一下,所以重新打开html的书略读,后记录了标签 ...

  7. Vmware workstation V2V

        错误提示     检查虚拟机文件是否有快照,用WORKSTATION打开虚拟机后删除所有快照再使用converter导入         检查VMx文件中声明的vmdk路径是否与文件实际路径相 ...

  8. python集合使用范例的代码

    在代码过程中中,将代码过程中比较好的代码段珍藏起来,如下的代码是关于python集合使用范例的代码,希望能对大伙有用. # sets are unordered collections of uniq ...

  9. ARM汇编指令集_学习笔记(1)

    一.什么是ARM汇编? 运行在ARM处理器上的汇编语言就叫ARM汇编. C程序运行在X86平台,底层就是X86汇编:运行在ARM平台,底层就是ARM汇编.ARM汇编与X86汇编有显著区别. X86属于 ...

  10. .NET性能优化小技巧

    .NET 性能优化小技巧 Intro 之前做了短信发送速度的提升,在大师的指导下,发送短信的速度有了极大的提升,学到了一些提升 .NET 性能的一些小技巧 HttpClient 优化 关于使用 Htt ...