《通过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的资料较少,这里有一篇可以作简单入门
https://studygolang.com/p/protoactor
为了便于开码友们理解,这个系列就以代码为主来学习,通过代码来“意会”Proto.Actor,所以这个系列叫《通过C#学Proto.Actor模型》,并且这些例子都是参考官方案例进行改造的最基础代码;从易到难,从单一技术点到组合技术点,再从伪代码到Demo代码,一步一步来。就像我一样,前期可能会一头雾水,不过没关系,坚持走下去,在某个转弯处,肯定会柳暗花明,豁然开朗。
Proto.Actor特点是:异步,分布式,高并发,高容错性,跨语言调用
系统博客Github地址:https://github.com/axzxs2001/ProtoActorSample
通过C#学Proto.Actor模型系列:
1. 《通过C#学Proto.Actor模型》之 HelloWorld
https://www.cnblogs.com/axzxs2001/p/9538313.html
2. 《通过C#学Proto.Actor模型》之Prpos
https://www.cnblogs.com/axzxs2001/p/9540265.html
3. 《通过C#学Proto.Actor模型》之Spawning
https://www.cnblogs.com/axzxs2001/p/9546030.html
4. 《通过C#学Proto.Actor模型》之PID
https://www.cnblogs.com/axzxs2001/p/9552186.html
5. 《通过C#学Proto.Actor模型》之Mailbox
https://www.cnblogs.com/axzxs2001/p/9558040.html
6. 《通过C#学Proto.Actor模型》之Supervision
https://www.cnblogs.com/axzxs2001/p/9564010.html
7. 《通过C#学Proto.Actor模型》之Behaviors
https://www.cnblogs.com/axzxs2001/p/9569146.html
8. 《通过C#学Proto.Actor模型》之Persistence
https://www.cnblogs.com/axzxs2001/p/9569899.html
9. 《通过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
using Proto; using System; using System.Threading.Tasks; namespace P001_HelloWorld { class Program { static void Main(string[] args) { //Actor产生一个props(道具) var props = Actor.FromProducer(() => new HelloActor()); //从props衍生pid,pid代理一个actor的地址 var pid = Actor.Spawn(props); //把Hello对象交给HelloActor处理 pid.Tell(new Hello { Who = "Alex" }); Console.ReadLine(); pid.Stop(); Console.ReadLine(); } } //传递对象 class Hello { public string Who; } //actor class HelloActor : IActor { //被调用 public Task ReceiveAsync(IContext context) { switch (context.Message) { case Started started: Console.WriteLine("Started"); break; case Hello hello: Console.WriteLine($"Hello {hello.Who}"); break; } return Actor.Done; } } }
可能你觉得就是一个控制台输出个Hello World,转了这么多弯;不要小看它,这可是一个支持分布式的Hello World,来看看后面经历了或可能经历了什么?
注意上图中的Event,我们在后面了解中会遇到他们。可运行上面的代码,并调试,会发现ReceiveAsync会在pid.Tell后被调用两次,第一次Context.Message就是Started对象,第二次才是Hello对象。
不防在Main中调用一下pid.Stop(),跟踪一下ReceiveAsync会有什么发现……
- 《通过C#学Proto.Actor模型》之Supervision
- 《通过C#学Proto.Actor模型》之Prpos
- 通过C#读取ini文件中的内容
- 转:C# 通过委托更新UI(异步加载)
- C#通过飞信WebService发送免费短信
- C# 系统应用之通过注册表获取USB使用记录
- 【java & c#】通过控制台编译和运行程序//不依赖IDE
- C#中通过DllImport使用 Win32 API
- C#中通过WMI的Win32_MemoryDevice对象获取内存信息简介
- C# 系统应用之通过注册表获取USB使用记录(一)
- C# 通过委托控制进度条以及多线程更新控件
- 如何用C#语言通过服务来实现开机启动?
- C#实现通过程序自动抓取远程Web网页信息
- C# 利用自带xsd.exe工具操作XML-如通过XML生成xsd文件
- c#中如何通过tabcontrol访问上边的tabpage
- .NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)
- C#通过DSOFile读取与修改文件的属性
- c# 通过反射调用类的构造函数
- 通过 API 实现 C# 对硬件的控制(二)
- C#通过浏览器的UserAgent获取Page Source