Proto.Actor模型
Proto.Actor模型
http://proto.actor/
https://github.com/axzxs2001/ProtoActorSample
https://www.cnblogs.com/axzxs2001/p/9538313.html
《通过C#学Proto.Actor模型》之 HelloWorld
在微服务中,数据最终一致性的一个解决方案是通过有状态的Actor模型来达到,那什么是Actor模型呢?
Actor是并行的计算模型,包含状态,行为,并且包含一个邮箱,来异步处理消息。
关于Actor的介绍可参考:
https://www.jianshu.com/p/449850aa8e82
https://www.jianshu.com/p/db04cab86ab9
对于.net下的Actor模型有akka.net, Microsoft Orleans,在这里我们介绍的是另外一个Actor模型Proto.Actor 【官网http://proto.actor】
proto.actor
这次要说一下Proto.Actor,关于Proto.Actor的资料较少,这里有一篇可以作简单入门
https://studygolang.com/p/protoactor
为了便于开码友们理解,这个系列就以代码为主来学习,通过代码来“意会”Proto.Actor,所以这个系列叫《通过C#学Proto.Actor模型》,并且这些例子都是参考官方案例进行改造的最基础代码;从易到难,从单一技术点到组合技术点,再从伪代码到Demo代码,一步一步来。就像我一样,前期可能会一头雾水,不过没关系,坚持走下去,在某个转弯处,肯定会柳暗花明,豁然开朗。
Proto.Actor特点是:异步,分布式,高并发,高容错性,跨语言调用
系统博客Github地址:https://github.com/axzxs2001/ProtoActorSample
通过C#学Proto.Actor模型系列:
- 《通过C#学Proto.Actor模型》之 HelloWorld
https://www.cnblogs.com/axzxs2001/p/9538313.html - 《通过C#学Proto.Actor模型》之Prpos
https://www.cnblogs.com/axzxs2001/p/9540265.html - 《通过C#学Proto.Actor模型》之Spawning
https://www.cnblogs.com/axzxs2001/p/9546030.html - 《通过C#学Proto.Actor模型》之PID
https://www.cnblogs.com/axzxs2001/p/9552186.html - 《通过C#学Proto.Actor模型》之Mailbox
https://www.cnblogs.com/axzxs2001/p/9558040.html - 《通过C#学Proto.Actor模型》之Supervision
https://www.cnblogs.com/axzxs2001/p/9564010.html - 《通过C#学Proto.Actor模型》之Behaviors
https://www.cnblogs.com/axzxs2001/p/9569146.html - 《通过C#学Proto.Actor模型》之Persistence
https://www.cnblogs.com/axzxs2001/p/9569899.html 《通过C#学Proto.Actor模型》之Remote
https://www.cnblogs.com/axzxs2001/p/9570640.html请注意代码注释,不可忽略哦!
《通过C#学Proto.Actor模型》之 HelloWorld:
代码:https://github.com/axzxs2001/ProtoActorSample/tree/master/ProtoActorSample/P001_HelloWorld
引用NuGet:Proto.Actor
复制代码
1 using Proto;
2 using System;
3 using System.Threading.Tasks;
4
5 namespace P001_HelloWorld
6 {
7 class Program
8 {
9 static void Main(string[] args)
10 {
11 //Actor产生一个props(道具)
12 var props = Actor.FromProducer(() => new HelloActor());
13 //从props衍生pid,pid代理一个actor的地址
14 var pid = Actor.Spawn(props);
15 //把Hello对象交给HelloActor处理
16 pid.Tell(new Hello
17 {
18 Who = "Alex"
19 });
20 Console.ReadLine();
21 pid.Stop();
22 Console.ReadLine();
23 }
24 }
25 //传递对象
26 class Hello
27 {
28 public string Who;
29 }
30 //actor
31 class HelloActor : IActor
32 {
33 //被调用
34 public Task ReceiveAsync(IContext context)
35 {
36 switch (context.Message)
37 {
38 case Started started:
39 Console.WriteLine("Started");
40 break;
41 case Hello hello:
42 Console.WriteLine($"Hello {hello.Who}");
43 break;
44 }
45 return Actor.Done;
46 }
47 }
48 }
复制代码
可能你觉得就是一个控制台输出个Hello World,转了这么多弯;不要小看它,这可是一个支持分布式的Hello World,来看看后面经历了或可能经历了什么?
注意上图中的Event,我们在后面了解中会遇到他们。可运行上面的代码,并调试,会发现ReceiveAsync会在pid.Tell后被调用两次,第一次Context.Message就是Started对象,第二次才是Hello对象。
不防在Main中调用一下pid.Stop(),跟踪一下ReceiveAsync会有什么发现……
Proto.Actor模型的更多相关文章
- 《通过C#学Proto.Actor模型》之 HelloWorld
在微服务中,数据最终一致性的一个解决方案是通过有状态的Actor模型来达到,那什么是Actor模型呢? Actor是并行的计算模型,包含状态,行为,并且包含一个邮箱,来异步处理消息. 关于Actor的 ...
- 《通过C#学Proto.Actor模型》之Mailbox
邮箱是Actor模型的一个重要组成部分,负责接收发过来的消息,并保存起来,等待Actor处理.邮箱中维护着两种队列,一种是存系统消息,另一个是存用户消息,系统省是指Started,Stoping,St ...
- 《通过C#学Proto.Actor模型》之Prpos
在第一篇Proto.Actor博文中,HelloWorld的第一行真正代码是: var props = Actor.FromProducer(() => new HelloActor()) ...
- 通过C#学Proto.Actor模型》之Remote
Proto.Actor中提供了基于tcp/ip的通迅来实现Remote,可以通过其Remot实现对Actor的调用. 先来看一个极简单片的远程调用. 码友看码: 引用NuGet包 Proto.Acto ...
- 《通过C#学Proto.Actor模型》之Persistence
Actor是有状态的,当每一步执行失败后,返回失败地方继续执行时,希望此时的状态是正确的,为了保证这一点,持久化就成了必要的环节了. Proto.Actor提供了三种方式执久化: Event Sour ...
- 《通过C#学Proto.Actor模型》之Behaviors
Behaviors就是Actor接收到消息后可以改变处理的方法,相同的Actor,每次调用,转到不同的Actor内方法执行,非常适合按流程进行的场景.Behaviors就通过在Actor内部实例化一个 ...
- 《通过C#学Proto.Actor模型》之Supervision
Supervision,字面意思是监督,是父Actor发现子Actor有异常发生后,对子Actor产用保种策略处理的机制,如果父Actor不处理,则往上传递. 子Actor发生异常后处理的策略有: R ...
- 《通过C#学Proto.Actor模型》之PID
PID对象是代表Actor对象的进程,是能过Actor.Spawn(props)获取的:它有什么成员呢?既然代理Actor,首先有一个ID,标识自己是谁,Actor在Spawn时可以命名这个ID,否则 ...
- 《通过C#学Proto.Actor模型》之Spawning
Props是配置Actor和实例化Actor,那实例化后,就应该访问了,Props.Actor提供了Actor.Spawn(),Actor.SpawnPrefix(),Actor.SpawnNamed ...
随机推荐
- 基于深度学习的目标检测算法:SSD——常见的目标检测算法
from:https://blog.csdn.net/u013989576/article/details/73439202 问题引入: 目前,常见的目标检测算法,如Faster R-CNN,存在着速 ...
- MySQL活动期间制定月份注册用户下单情况_20161029
在10.29到10.31号期间 10月新注册的用户订单金额满600元赠与优惠券 #3天内订单满600元且10月注册的用户订单明细 SELECT a.城市,a.用户ID,b.用户名称,DATE(b.注册 ...
- 基于STM32的uCGUI移植和优化
基于STM32的uCGUI移植和优化 首先在开始这个说明之前,要简要说明下具体的环境: 编译工具:MDK4.20 开发板:安富莱v2版开发板 调试器:JLink v8盗版 移植篇 相信大家有移植经验 ...
- python基础知识-字符串
字符串: 赋值方法 a = 'name' a = str('name') 字符串的方法: #!/usr/bin/env python class str(object): ""&q ...
- C# 使用 MemoryStream 将数据写入内存
转自:http://blog.csdn.net/andrew_wx/article/details/6629951 常用的MemoryStream构造函数有以下3种. 1:MemoryStream() ...
- 搭建Node+NPM+Grunt+Ruby开发环境
序 最近尝试了一下CoffeeScript,和Sass,不得不说这两个搭配起来的确是不错的选择,熟悉以后基本上开发就比较快速了. 当然要开发这个首先需要搭建环境,这里就需要有Node.NPM.Grun ...
- JavaScript高级程序设计学习笔记第四章--变量、作用域和内存问题
1.变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 2.变量复制 如果从一个变量向另一个变量复制基本类型的值,会在 ...
- js的prototype的详解(1)
一.什么是JavaScript中对象的prototype属性 JavaScript中对象的prototype属性,是用来返回对象类型原型的引用的.我们使用prototype属性提供对象的类的一组基本功 ...
- Linux 程式減肥(strip & objcopy)(转载)
转自:http://calamaryshop.blogspot.com/2011/11/linux-strip-objcopy.html 對於設計嵌入式Linux系統的研發人員來說,記憶體的空間是非常 ...
- WPF语言切换,国际化
winform语言切换在每个窗口下面有一个.resx结尾的资源文件,在上面添加新字符串就好了: WPF语言切换跟winform不一样的地方在于需要自己添加资源文件,并且这个资源文件可以写一个,也可以写 ...