当前位置: 移动技术网 > IT编程>开发语言>.net > 《通过C#学Proto.Actor模型》之 HelloWorld

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

2018年08月27日  | 移动技术网IT编程  | 我要评论

炒原油,海口公交,神汉流氓

在微服务中,数据最终一致性的一个解决方案是通过有状态的actor模型来达到,那什么是actor模型呢?

actor是并行的计算模型,包含状态,行为,并且包含一个邮箱,来异步处理消息。

关于actor的介绍可参考:

对于.net下的actor模型有akka.net, microsoft orleans,在这里我们介绍的是另外一个actor模型proto.actor 【官网http://proto.actor】

这次要说一下proto.actor,关于proto.actor的资料较少,这里有一篇可以作简单入门

 

为了便于开码友们理解,这个系列就以代码为主来学习,通过代码来“意会”proto.actor,所以这个系列叫《通过c#学proto.actor模型》,并且这些例子都是参考官方案例进行改造的最基础代码;从易到难,从单一技术点到组合技术点,再从伪代码到demo代码,一步一步来。就像我一样,前期可能会一头雾水,不过没关系,坚持走下去,在某个转弯处,肯定会柳暗花明,豁然开朗。

 

proto.actor特点是:异步,分布式,高并发,高容错性,跨语言调用  

 

《通过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会有什么发现……

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网