企业级工作流解决方案(二)--微服务总体介绍

  微服务好处和概念性的东西就不介绍了,对于微服务,个人认为并不是越复杂就越好,相反要结合自己公司的现状,适当的做一些裁剪,比如对于规模和业务量不是特别大的企业,就没有必要把服务总线,服务健康检查,服务路由选择,熔断等等加进来,相反,这一部分职责可以通过配置文件,nginx代理,api网关等等外围的技术来控制,当企业达到一定的规模之后,再来完善这部分内容,但是对于微服务处理过程来说,没有任何影响。

  我这里根据json-rpc 2.0标准,结合网上一些开源的微服务架构思想,采用dotnetty技术,搭建了一套轻量级的微服务通信组件,组件专注于Rpc Call这块的处理。

整体说明

先上一张图,Rpc socket调用过程

Rpc调用处理方式

三种处理方式:1. Local本地调用,一个服务调用另一个服务,有可能另个服务都宿主到同一个应用程序中,这种情况直接走本地调用;2. Tcp调用,这个应该是最体现价值的一种方式,服务消费者和服务提供者分别宿主到企业内部服应用程序中,相互之间通信走Tcp通道;3. Http调用,对于服务消费者和服务提供者一个在企业外部,一个在企业内部,或者其他语言开发的应用程序交互需要简单的集成调用,这种可以走Http调用过程。

Socket消息传输

直接基于dotnetty传输处理,dotnetty传输通道是串行的,服务端接收到消息的时候,每一个消息是异步线程完成处理的。

消息处理对象

调用方需要构造消息对象,并对消息进行编码,生成消息唯一Id,线程阻塞,等待线程被唤醒。服务端接收到消息,对消息进行解码,答复客户端的时候,需要拿到客户端调用生成的消息Id回调客户端,客户端收到答复消息,根据消息Id唤醒等待线程。

Tcp Invoker和ProcessHandler

主要是对Json-Rpc调用的请求和答复进行处理,并对内容进行处理,ProcessHandler需要创建服务委托对象,调用真正的服务。

微服务详细交互过程

先放一张图,后续对这种图进行详细的介绍。

原文地址:https://www.cnblogs.com/spritekuang/p/10805472.html

时间: 2024-10-12 07:42:57

企业级工作流解决方案(二)--微服务总体介绍的相关文章

企业级工作流解决方案(一)--总体介绍

引言:国内对于流程引擎的介绍非常的少,但是不能否认流程引擎的重要性,流程引擎在各个行业都有应用,OA管理的请假流程.出差流程,项目管理上的合同审批流程.验收流程.启动流程,Erp中的采购流程.入库出库流程,政府里面的招标流程.结算流程等,都有流程引擎的身影,当然这里说的流程指审批意义的流程,还有一些不用人为参与的生产作业生产过程也是可以用工作流来解决的. 工作了多年,是时候把工作中的一些东西沉淀下来,准备写一系列文章,系统的介绍企业级工作流管理平台的搭建以及设计思路,希望能对其他人有所帮助.这一

微服务架构介绍

jhipser微服务架构介绍 内容提要 本文涉及以下内容: 微服务架构介绍 spring cloud介绍 jhipster架构介绍 微服务架构介绍 微服务概念 微服务和SOA很相似,都是按照业务功能把系统拆分成一个一个的服务.比如电子商务系统拆分成订单服务,商品服务等,每个微服务都是自治的,可以单独部署.微服务和SOA的区别是:微服务粒度更细,通信协议倾向于使用restfull api 而不使用webservice.微服务有很多优点,包括松散耦合.自治服务.分散化治理以及易于持续交付等等.微服务

企业级工作流解决方案(五)--微服务消息处理模型之客户端端处理

微服务的服务端已经启动起来了,服务消费者怎么知道服务在哪个地方,通过什么方式调用呢,分布式如何选择正确的服务器调用服务? 这个就涉及到服务发现.服务健康检查的问题了,很多微服务架构的做法都是通过消息队列来实现的,消息队列天生就支持发布订阅功能,服务有变化之后,发布通知,每个消费者更新状态,还涉及到更新服务的metadata信息,同时还涉及到服务健康检查等等一系列功能,其实这些地方是非常容易出问题的地方,但是对于规模流量不是特别巨大的企业,这部分职责可以进行转移,服务的发现就直接通过配置文件实现,

企业级工作流解决方案(三)--微服务消息处理模型之服务端处理

1. Json-Rpc 2.0 参考地址:https://www.jsonrpc.org/specification JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议,它允许运行在基于socket,http等诸多不同消息传输环境的同一进程中.其使用JSON(RFC 4627)作为数据格式,它为简单而生. 请求对象 发送一个请求对象至服务端代表一个rpc调用, 一个请求对象包含下列成员: jsonrpc指定JSON-RPC协议版本的字符串,必须准确写为“2.0” method包含所

企业级工作流解决方案(四)--微服务消息处理模型之消息传输通道

消息传输通道我这里只定义了3种,即:localInvoker,HttpInvoker,TcpInvoker,根据实际的情况,还可以进行扩展,比如消息队列,不过这都是后话了,先重点描述一下这3种方式. LocalInvoker 本地调用直接构造请求参数,直接调用服务端的JsonRpcProcessor服务处理执行服务处理过程,这个不多说. HttpInvoker 即执行http请求处理过程,由于.net framework和.net core的运行机制有所不同,处理方式也有所不同,但最终都落到服务

企业级工作流解决方案(六)--微服务消息处理模型之与Abp集成

身份认证传递 对于Abp比较熟悉的朋友应该对他里面的用户身份认证比较熟悉,他是通过实现微软提供的权限认证方式实现的,用户登录身份信息存储在System.Security.Claims.ClaimsPrincipal里面,但是用户的身份信息如何在不同的服务之间传递呢,不可能每一个服务都必须实现这套身份认证吧?比如我们请求调用过程如下: Portal站点获取用户信息没有问题,但如何传递到调用的其他微服务呢? 这在之前文章中提到的传输Header就起到了作用,有两种方式可以处理,第一种我们可以直接把a

.net core 微服务项目-介绍篇

项目介绍 1.各种方式连接API都会连接到 APIGateway 来进行统一的分发 Ocelot 2.当api需要授权时 需要请求授权服务 IdentityServer4 3.授权服务对请求进行调用user.api 验证 4.user.api验证结果返回 5.授权服务返回token信息或授权失败 6.携带token访问user.api 7.user.api返回结果 (401,403是未授权) 8.访问不需要授权的user.api 9.api之间的交互 Polly 10.api之间通过EventB

企业级工作流解决方案(九)--微服务Tcp消息传输模型之客户端处理

客户端启动 客户端启动主要做三件事情,1. 从配置文件读取服务调用配置,存储到全局对象中.2. 指定客户端编解码器工厂.3. 预连接,即预先建立与服务端的通信Chanel. [DependsOn(typeof(AbpKernelModule))] public class JsonRpcClientModule : AbpModule { public override void PreInitialize() { // 注册客户端配置,固定从Xml文件读取 SocketClientConfig

企业级工作流解决方案(八)--微服务Tcp消息传输模型之服务端处理

服务端启动 服务端启动主要做几件事情,1. 从配置文件读取服务配置(主要是服务监听端口和编解码配置),2. 注册编解码器工厂,3. 启动dotnetty监听端口,4. 读取配置文件,解析全局消息处理模型5. 注册服务端处理对象到容器. JsonRpcServerModule代码如下,见备注说明 [DependsOn(typeof(AbpKernelModule))] public class JsonRpcServerModule : AbpModule { public override vo