一. 起始

去年.NetCore2.0的发布,公司决定新项目采用.NetCore开发,当作试验。但是问题在于当前公司内部使用的RPC服务为Thrift v0.9 + zookeeper版本,经过个性化定制,支持了异步,但也因为如此,这么多年来一直没有去升级,导致迁移工作很复杂(历史遗留项目太多,有各种语言的,目前只有.net体系的开发人员)。另外一点公司本身是做电商服务的,很多东西依赖了阿里的数据,阿里要求数据不能够出聚石塔,我们将所有相关的应用迁移到了聚石塔,随之问题也来了,聚石塔只开放了80端口,这么多的Thrift服务需要开放端口,机房与聚石塔之间的交互就很头疼了,如果改成http请求的话,代价以及各类成本较高。经过一段时间的调研,决定采用grpc作为新的RPC服务框架,原因有以下几点:

(1)支持多语言

(2)支持http/2,80端口可用

但是grpc需要做集群支持,也经过一段时间的研究,决定抛弃zookeeper,采用consul来作为注册中心,至于原因,有很多方面。

二. 组件Sodao.Core.Grpc

为了让grpc实现集群部署,自行开发了通用组件Sodao.Core.Grpc,其依赖于Grpc + Consul,代码已开源,详见github

https://github.com/mojinxun/core-grpc

https://gitee.com/overt/core-grpc

三. 简单介绍使用

1. Nuget包引用

  • Nuget版本:V 1.0.0

  • 框架支持: Framewok 4.5 - 4.7 / NetStandard 2.0

Install-Package Sodao.Core.Grpc -Version 1.0.0

2. 配置信息

(1)服务端配置信息 (NetCore / Framework)
  • NetCore配置案例 appsettings.json

{  "GrpcServer": {    "Service": {      "Name": "SodaoGrpcServiceApp",                    服务名称使用服务名称去除点      "Host": "service.g.lan",                          专用注册的域名 (可选)      "HostEnv": "serviceaddress",                      环境变量配置(可选,同上)      "Port": 10001,                                    端口:与端田申请      "Consul": {        "Path": "dllconfigs/consulsettings.json"        Consul路径,不配置将不注册,为单点项目      }    }  }}
  • Framework配置案例 app.config

// 添加section<configSections><section name="grpcServer" type="Sodao.Core.Grpc.GrpcServerSection, Sodao.Core.Grpc" /></configSections>

// 添加节点<grpcServer><service name="SodaoGrpcServiceApp" port="10005" host="专用注册的域名 (可选)" hostEnv="环境变量配置(可选,同上)"><registry><consul path="dllconfigs/Consul.config" /></registry></service></grpcServer>
(2)客户端配置信息
  • NetCore

  • 命名:[命名空间].dll.json 文件夹(dllconfigs)

  • Framework

(3)Consul配置文件
  • NetCore

{"ConsulServer": {"Service": {"Address": "http://consul.g.lan" // 默认8500端口    }  }}
  • Framework

<?xml version="1.0" encoding="utf-8" ?><configuration><configSections><section name="consulServer" type="Sodao.Core.Grpc.ConsulServerSection, Sodao.Core.Grpc"/></configSections><consulServer><service address="http://consul.g.lan"></service></consulServer></configuration>

3. 服务端的使用

(1)NetCore

// 原因:服务启动的时候是一个单例,那么所有服务之下的全部是单实例,而数据层需要使用多实例

(2)Framework 4.6

  • 直接调用GrpcServiceManager来启动

4. 客户端使用

(1)NetCore

  • 强制依赖注入模式

  • 配置文件默认使用 [命名空间].dll.json 可通过vs.menu工具生成nuget包

  • 注入中直接调用如下

var res = _grpcClient.Client.Ask(new Service.Grpc.AskRequest() { Key = "abc" });

(2)Framework

  • 客户端代理类,编译在Dll中,类似于ThriftProxy,源码如下,可忽略

  • 使用代理类执行

ClientManager.Instance.[Method]

原文地址:https://www.cnblogs.com/mojinxun/p/10050303.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

NetCore服务虚拟化01(集群组件Sodao.Core.Grpc)相关推荐

  1. redis在Windows下以后台服务一键搭建集群(多机器)

    redis在Windows下以后台服务一键搭建集群(多机器) 一.概述 此教程介绍如何在windows系统中多台机器之间布置redis集群,同时要以后台服务的模式运行.布置以脚本的形式,一键完成.多台 ...

  2. HeartBeat 集群组件概述

    Heartbeat 是一个基于Linux开源的高可用集群系统.主要包括心跳服务和资源接管两个高可用集群组件.心跳监测服务可以通过网络链路和串口进行,而且支持冗余链路, 它们之间相互发送报文来告诉对方自 ...

  3. 云图说|OLAP开源引擎的一匹黑马,MRS集群组件之ClickHouse

    摘要:ClickHouse是俄罗斯公司Yandex在2016年开源的高性能.开源联机分析列式数据库管理系统.开源后,凭借卓越的分析性能.极好的线性扩展能力和丰富的功能,被业界公认为实时分析领域OLAP ...

  4. 源码分析Dubbo Invoker概述----服务发现、集群、负载均衡、路由体系

    Invoker,负载网络调用组件,底层依懒与网络通信,Invoker主要负责服务调用,自然与路由(比如集群)等功能息息相关,本节先从整体上把控一下Dubbo服务调用体系,服务发现.集群.负载均衡.路由 ...

  5. Heartbeat(v1、v2、pacemaker)集群组件概述

    一.什么是Heartbeat Heartbeat 是一个基于Linux开源的高可用集群系统.主要包括心跳服务和资源接管两个高可用集群组件.心跳监测服务可以通过网络链路和串口进行,而且支持冗余链路, 它 ...

  6. 如何将单机版的Eureka服务改为集群版Eureka服务

    Eureka 集群原理 基本原理 上图是来自eureka的官方架构图,这是基于集群配置的eureka: 处于不同节点的eureka通过Replicate进行数据同步 Application Servi ...

  7. 【SpringCloud】三、Nacos服务注册+配置管理+集群搭建

    文章目录 一.认识Nacos 1.安装 2.服务注册和发现 3.服务分级存储模型 4.负载均衡策略--NacosRule 5.服务实例的权重设置 5.环境隔离namespace 6.Eureka和Na ...

  8. 云图说丨OLAP开源引擎的一匹黑马,MRS集群组件之ClickHouse

    摘要:ClickHouse是俄罗斯公司 Yandex 在2016年开源的高性能.开源联机分析列式数据库管理系统.开源后,凭借卓越的分析性能.极好的线性扩展能力和丰富的功能,被业界公认为实时分析领域 O ...

  9. 微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx

    在互联网应用领域,服务的动态性需求十分常见,这就对服务的自动发现和可动态扩展提出了很高的要求. 微服务系统动辄上万个服务,而且还要动态伸缩.以人工写好的IP.Port 硬编码脚本的方式无法做到大规模自 ...

最新文章

  1. 从指定文件夹里COPY指定的一批文件列表(TXT文件)
  2. 入门十大Python机器学习算法(附代码)
  3. 图解Win7下PowerShell初步使用
  4. Python批量删除错误图片、修改文件名以及删除重复图片
  5. 2025年全球5G设备将达到14亿部 但4G仍占主导地位
  6. Moodle中的角色与权限控制
  7. 1.Spring框架入门
  8. Windows Azure 云计算服务: 怎样按需选择并计算它将花费多少钱呢?
  9. Centos如何通过yum安装php7
  10. ECMA-262 6th Edition
  11. Disruptor 极速体验
  12. 乐优商城(09)--商品详情
  13. 混合线性规划matlab,matlab求解混合的非线性规划软件说明
  14. azure java sdk_用于 Azure 媒体服务的 Java SDK 使用入门 | Microsoft Docs
  15. leetcode题解日练--2016.8.6
  16. 《财务共享服务》读书笔记
  17. android 手机 apk安装失败对应码
  18. html+css模仿微信主页面
  19. 如何解决hao.123.com的挟持网页(篡改网站主页)
  20. 第一节:linux 开发AI算法以及libtorch部署算法详细教程-环境搭建

热门文章

  1. android 设备名称_如何更改您的Android TV的设备名称
  2. MySQL数据库的优化(下)MySQL数据库的高可用架构方案
  3. RabbitMQ详解(三)
  4. WiFi行业将走向何方?
  5. MySQL存储过程相互调用
  6. 如何部署同一个Spring boot web 应用到不同的环境
  7. FZU 2095 水面高度
  8. Java内部类详解(转)
  9. linux--web服务器
  10. centos linux 禁止ping