郓城做网站网络公司,姓氏网站建设的意见和建议,进一步推进网站建设,乐营销网站一. 起始去年.NetCore2.0的发布#xff0c;公司决定新项目采用.NetCore开发#xff0c;当作试验。但是问题在于当前公司内部使用的RPC服务为Thrift v0.9 zookeeper版本#xff0c;经过个性化定制#xff0c;支持了异步#xff0c;但也因为如此#xff0c;这么多年来一直… 一. 起始去年.NetCore2.0的发布公司决定新项目采用.NetCore开发当作试验。但是问题在于当前公司内部使用的RPC服务为Thrift v0.9 zookeeper版本经过个性化定制支持了异步但也因为如此这么多年来一直没有去升级导致迁移工作很复杂历史遗留项目太多有各种语言的目前只有.net体系的开发人员。另外一点公司本身是做电商服务的很多东西依赖了阿里的数据阿里要求数据不能够出聚石塔我们将所有相关的应用迁移到了聚石塔随之问题也来了聚石塔只开放了80端口这么多的Thrift服务需要开放端口机房与聚石塔之间的交互就很头疼了如果改成http请求的话代价以及各类成本较高。经过一段时间的调研决定采用grpc作为新的RPC服务框架原因有以下几点1支持多语言2支持http/280端口可用但是grpc需要做集群支持也经过一段时间的研究决定抛弃zookeeper采用consul来作为注册中心至于原因有很多方面。二. 组件Sodao.Core.Grpc为了让grpc实现集群部署自行开发了通用组件Sodao.Core.Grpc其依赖于Grpc Consul代码已开源详见github https://github.com/mojinxun/core-grpchttps://gitee.com/overt/core-grpc三. 简单介绍使用1. Nuget包引用Nuget版本V 1.0.0框架支持 Framewok 4.5 - 4.7 / NetStandard 2.0Install-Package Sodao.Core.Grpc -Version 1.0.02. 配置信息1服务端配置信息 NetCore / FrameworkNetCore配置案例 appsettings.json{ GrpcServer: { Service: { Name: SodaoGrpcServiceApp, 服务名称使用服务名称去除点 Host: service.g.lan, 专用注册的域名 可选 HostEnv: serviceaddress, 环境变量配置可选同上 Port: 10001, 端口与端田申请 Consul: { Path: dllconfigs/consulsettings.json Consul路径不配置将不注册为单点项目 } } }}Framework配置案例 app.config// 添加sectionconfigSectionssection namegrpcServer typeSodao.Core.Grpc.GrpcServerSection, Sodao.Core.Grpc //configSections// 添加节点grpcServerservice nameSodaoGrpcServiceApp port10005 host专用注册的域名 可选 hostEnv环境变量配置可选同上registryconsul pathdllconfigs/Consul.config //registry/service/grpcServer2客户端配置信息NetCore命名[命名空间].dll.json 文件夹(dllconfigs)Framework3Consul配置文件 NetCore{ConsulServer: {Service: {Address: http://consul.g.lan // 默认8500端口 } }}Framework?xml version1.0 encodingutf-8 ?configurationconfigSectionssection nameconsulServer typeSodao.Core.Grpc.ConsulServerSection, Sodao.Core.Grpc//configSectionsconsulServerservice addresshttp://consul.g.lan/service/consulServer/configuration3. 服务端的使用1NetCore// 原因服务启动的时候是一个单例那么所有服务之下的全部是单实例而数据层需要使用多实例2Framework 4.6直接调用GrpcServiceManager来启动 4. 客户端使用1NetCore强制依赖注入模式配置文件默认使用 [命名空间].dll.json 可通过vs.menu工具生成nuget包注入中直接调用如下var res _grpcClient.Client.Ask(new Service.Grpc.AskRequest() { Key abc });2Framework客户端代理类编译在Dll中类似于ThriftProxy源码如下可忽略使用代理类执行ClientManager.Instance.[Method]原文地址https://www.cnblogs.com/mojinxun/p/10050303.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com