Fork me on GitHub
摘要: Proto.Actor中提供了基于tcp/ip的通迅来实现Remote,可以通过其Remot实现对Actor的调用。阅读全文
posted @ 2018-09-01 15:52 桂素伟 阅读(185) 评论(2) 编辑
摘要: Actor是有状态的,当每一步执行失败后,返回失败地方继续执行时,希望此时的状态是正确的,为了保证这一点,持久化就成了必要的环节了。 Proto.Actor提供了三种方式执久化: • Event Sourcing事件溯源 • Snapshotting快照 • Event Sourcing with Snapshotting带快照的事件溯源阅读全文
posted @ 2018-09-01 12:35 桂素伟 阅读(420) 评论(0) 编辑
摘要: Behaviors就是Actor接收到消息后可以改变处理的方法,相同的Actor,每次调用,转到不同的Actor内方法执行,非常适合按流程进行的场景。Behaviors就通过在Actor内部实例化一个Behavior对象,然后通过这个对象的Become来切换执行的方法的。阅读全文
posted @ 2018-09-01 08:43 桂素伟 阅读(173) 评论(0) 编辑
摘要: Supervision,字面意思是监督,是父Actor发现子Actor有异常发生后,对子Actor产用保种策略处理的机制,如果父Actor不处理,则往上传递。阅读全文
posted @ 2018-08-31 09:39 桂素伟 阅读(132) 评论(1) 编辑
摘要: 邮箱是Actor模型的一个重要组成部分,负责接收发过来的消息,并保存起来,等待Actor处理。邮箱中维护着两种队列,一种是存系统消息,另一个是存用户消息,系统省是指Started,Stoping,Stoped之类的,用户当然指我们自定义的Actor。 另外,我们可以通过实现IMailboxStatistics接口,来获取邮箱的状态变更,并且可以有多个IMailboxStatistics实现。阅读全文
posted @ 2018-08-30 08:35 桂素伟 阅读(154) 评论(2) 编辑
摘要: PID对象是代表Actor对象的进程,是能过Actor.Spawn(props)获取的;它有什么成员呢?既然代理Actor,首先有一个ID,标识自己是谁,Actor在Spawn时可以命名这个ID,否则会自动生成。还有三种向邮箱发消息的方法,Tell(),Request(),RequestAsync(),还有一个发送系统消息(Started,Stoping,Stoped等)方法SendSystemMessage(),还有一个停止的方法Stop()。阅读全文
posted @ 2018-08-29 08:58 桂素伟 阅读(152) 评论(0) 编辑
摘要: Props是配置Actor和实例化Actor,那实例化后,就应该访问了,Props.Actor提供了Actor.Spawn(),Actor.SpawnPrefix(),Actor.SpawnNamed()三个方法,来获取Actor实例,需要注意的是,这些方法返回的并不是真正的Actor对象,而是一个ProgressID,一个代表Actor对象的进程ID,缩写PID。阅读全文
posted @ 2018-08-28 09:05 桂素伟 阅读(150) 评论(0) 编辑
摘要: 在第一篇Proto.Actor博文中,HelloWorld的第一行真正代码是: var props = Actor.FromProducer(() => new HelloActor()); 这个返回的变量props就是一个Props的对象,它是负责创Actor实例,以及配置Actor实例,并且产Actor上下文Context(类似asp.net中的Context)。阅读全文
posted @ 2018-08-27 09:05 桂素伟 阅读(283) 评论(5) 编辑
摘要: 在微服务中,数据最终一致性的一个解决方案是通过有状态的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。阅读全文
posted @ 2018-08-26 19:11 桂素伟 阅读(461) 评论(1) 编辑
摘要: Swagger作为WebAPI的文档工具,广为人知,Swagger对asp.net core的支持也几近完美,这篇博文不是对asp.net core中使用Swagger作介绍,因为社区博客作了详细说明。 今天主要说一下Swagger在Ocelot网关权限验证模式下的访问,以及Swagger请求应答的数据格式。阅读全文
posted @ 2018-07-02 13:57 桂素伟 阅读(1338) 评论(2) 编辑
摘要: Ocelot作为基于.net core的API方关,有一个功能是统一验证,它的作用是把没有访问权限的请求挡在API网关外面,而不是到达API网关事端的API时才去验证;之前我有一篇博文https://www.cnblogs.com/axzxs2001/p/8005084.html,作过说明,这篇博文说明了实现代码,今天我把这个实现作了整理,封装成一个Nuget包,供大家方便调用。阅读全文
posted @ 2018-07-01 17:08 桂素伟 阅读(1128) 评论(4) 编辑
摘要: 关于Consul(https://www.consul.io)是一个分布式,高可用,支持多数据中心的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源。 在Consul的文档上,Consul 支持Service Discovery, Health Checking, Key/Value Store, Multi DataCenter。运用Consul,可以在系统中build复杂的应用和服务的发现等。本文不是Consul的学习重点,关于更多Consul的学习,可参考:http://blog.csdn.net/column/details/consul.html阅读全文
posted @ 2018-03-01 11:18 桂素伟 阅读(4597) 评论(15) 编辑
摘要: Ocelot(https://github.com/TomPallister/Ocelot)是一个用.net core实现的API网关,Butterfly(https://github.com/ButterflyAPM/butterfly)是用.net core实现的全程序跟踪,现在,Ocelot中可以使用Butterfly了,关于Ocelot和Butterfly具体功能参见各自的github站点,关于Ocelot和Butterfly组合实现,参数张善友博客http://www.csharpkit.com/2018-02-04_51207.html,本篇博客讲述一个案例的实现。阅读全文
posted @ 2018-02-27 13:20 桂素伟 阅读(1293) 评论(7) 编辑
摘要: 网关的作用之一,就是有统一的数据出入口,基于这个功能,我们可以在网关上配置监控,从而把所有web服务的请求应答基本数据捕获并展显出来。阅读全文
posted @ 2017-12-08 14:05 桂素伟 阅读(1322) 评论(2) 编辑
摘要: 一篇,我们创建了OcelotGateway网关项目,DemoAAPI项目,DemoBAPI项目,为了验证用户并分发Token,现在还需要添加AuthenticationAPI项目,也是asp.net core web api项目,整体思路是,当用户首次请求(Request)时web服务,网关会判断本请求有无Token,并是否正确,如果没有或不正确,就会反回401 Unauthorized;如果请求调用登录,正确输入用户名或密码,AuthenticationAPI会验证并分发Token;当客户端带上Token再次访问web服务时,网关就会放过本请求,当请求到达web服务时,web服务要对本Token进行授权验证,如果有访问请求的地址,会成功返回应答,负责会提示没有权验,所以只要具有正确的Token,应答返回都是200 OK,因为Token正确,只是没有权限访问请求的内容。阅读全文
posted @ 2017-12-08 14:01 桂素伟 阅读(2880) 评论(9) 编辑
摘要: Ocelot是一个.net core框架下的网关的开源项目,下图是官方给出的基础实现图,即把后台的多个服务统一到网关处,前端应用:桌面端,web端,app端都只用访问网关即可。阅读全文
posted @ 2017-12-08 13:51 桂素伟 阅读(2501) 评论(18) 编辑
摘要: 在对业务层进行单元测试时,因为业务层调用到数据处理层,所以要用Moq去模拟DbContext,这个很容易做到,但如果操作DbContext下的DbSet和DbSet下的扩展方法时,就会抛出一个System.NotSupportedException异常。这是因为我们没办法Mock DbSet,并助DbSet是个抽象类,还没有办法实例化。阅读全文
posted @ 2017-11-03 11:24 桂素伟 阅读(353) 评论(1) 编辑
摘要: JWT(json web token)是一种基于json的身份验证机制,流程如下: 通过登录,来获取Token,再在之后每次请求的Header中追加Authorization为Token的凭据,服务端验证通过即可能获取想要访问的资源。关于JWT的技术,可参考网络上文章,这里不作详细说明, 这篇博文,阅读全文
posted @ 2017-09-16 12:49 桂素伟 阅读(3450) 评论(28) 编辑
摘要: 在《asp.net core认证与授权》中讲解了固定和自定义角色授权系统权限,其实我们还可以通过其他方式来授权,比如可以通过角色组,用户名,生日等,但这些主要取决于ClaimTypes,其实我们也可以自定义键值来授权,这些统一叫策略授权,其中更强大的是,我们可以自定义授权Handler来达到灵活授权,下面一一展开。阅读全文
posted @ 2017-09-06 08:07 桂素伟 阅读(2706) 评论(15) 编辑
摘要: 在asp.net core中,微软提供了基于认证(Authentication)和授权(Authorization)的方式,来实现权限管理的,本篇博文,介绍基于固定角色的权限管理和自定义角色权限管理,本文内容,更适合传统行业的BS应用,而非互联网应用。阅读全文
posted @ 2017-09-06 07:56 桂素伟 阅读(11502) 评论(21) 编辑