最实用接地气的 .NET 微服务框架

2024-08-26 18:52
文章标签 服务 框架 实用 net 接地

本文主要是介绍最实用接地气的 .NET 微服务框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

项目介绍

快速入门

1、服务注册

2、启动UI

3、服务发现与调用

4、启动服务网关

项目地址

最后

前言

微服务架构已经成为搭建高效、可扩展系统的关键技术之一,然而,现有许多微服务框架往往过于复杂,使得我们普通开发者难以快速上手并体验到微服务带了的便利。为了解决这一问题,于是作者精心打造了一款最接地气的 .NET 微服务框架,帮助我们轻松构建和管理微服务应用。

本框架不仅支持 Consul 服务注册与发现,还自带了一系列高级特性,包括配置中心、链路跟踪(APM)、服务网关等,极大地简化了微服务的开发和运维过程。

此外框架还实现了 Saga 分布式事务、RabbitMQ 事件总线等功能,确保系统能够高效处理复杂的业务逻辑。更重要的是提供了一个人性化的 Dashboard 管理面板,使得监控和管理微服务集群变得方便。

通过本文的介绍大家可以学习到如何快速上手并充分利用这些特性,从而构建出既高效又稳定的微服务应用。

项目介绍

Wing 致力于打造一个功能强大且易于使用的 .NET 微服务框架,支持 .NET 6+ 运行平台。

该框架具备以下特点:

1、服务注册与发现:支持 Consul 服务注册与发现机制,确保服务间的自动发现和动态管理。

2、服务间通讯:支持 HTTP 和 gRPC 两种调用方式,内置负载均衡器,实现高效的服务间通信。

3、服务策略与异常处理:提供服务策略配置,支持服务异常降级处理,确保系统的稳定性和可靠性。

4、Saga 分布式事务:支持三种恢复策略(向前恢复、向后恢复、先前再后),确保事务的一致性和完整性。

5、配置中心:内置配置中心,实现服务配置的在线集中统一管理。

6、链路追踪与性能监控:支持 HTTP/gRPC/SQL 的链路追踪(APM)及耗时分析统计,帮助开发者快速定位性能瓶颈。

7、服务网关:内置服务网关,支持全局服务策略和个性化服务策略配置,简化服务入口管理。

8、事件总线:支持 RabbitMQ 事件总线,实现服务间的异步通信和事件传递。

9、管理界面:提供人性化的 Dashboard 管理界面,便于监控和管理整个微服务集群。

Wing 框架为开发者提供一个强大而直观的开发平台,帮助快速构建和管理高效、可扩展的微服务应用。

快速入门

1、服务注册

什么是服务注册?

服务注册是指服务启动后将该服务的IP、端口等信息注册到Consul

创建一个Web API 项目

提前准备:安装并启动Consul

打开 Visual Studio 2022 并创建Web API项目

安装依赖包

dotnet add package Wing.Consul

Program代码

builder.Services.AddWing();

添加配置

{// 是否启用配置中心,默认启用"ConfigCenterEnabled": false,"Consul": {"Url": "http://localhost:8500","Service": {//Http  Grpc"Option": "Http","HealthCheck": {"Url": "http://localhost:1210/health",//单位:秒"Timeout": 10,//单位:秒"Interval": 10},"Name": "Wing.Demo_1.2.1","Host": "localhost","Port": 1210,"Tag": "","LoadBalancer": {//RoundRobin  WeightRoundRobin LeastConnection"Option": "WeightRoundRobin",//权重"Weight": 60},"Scheme": "http","Developer": "linguicheng"},//定时同步数据时间间隔,单位:秒 小于等于0表示立即响应"Interval": 10,//数据中心"DataCenter": "dc1",//等待时间,单位:分钟"WaitTime": 3}
}

查看运行效果

程序运行后,打开consul UI管理界面,可以看到注册服务Wing.Demo_1.2,具体如下图所示:

2、启动UI

Wing.UIWing微服务框架中的一个可视化操作管理系统,主要功能有服务治理、配置中心、APM管理、Saga分布式事务查询。

安装依赖包

安装服务注册nuget包Wing.Consul,UI可视化界面管理nuget包Wing.UI,选择对应的数据库驱动(参考FreeSql官网),以SqlServer为例,安装FreeSql.Provider.SqlServer

dotnet add package Wing.UI 
dotnet add package FreeSql.Provider.SqlServer

Program代码

using Wing;
var builder = WebApplication.CreateBuilder(args);
builder.Host.AddWing(builder => builder.AddConsul());
builder.Services.AddWing().AddWingUI(FreeSql.DataType.SqlServer);

查看运行效果

程序运行后,浏览器访问 ,运行效果如下图:

可以看到示例 1.2 注入的服务`Wing.Demo_1.2

3、服务发现与调用

什么是服务发现?

服务发现是指服务启动后将服务注册信息定时同步刷新到本地或实时获取Consul的服务信息。

安装依赖

dotnet add package Wing.Consul

Grpc健康检查

protobuf文件

syntax = "proto3";
package grpc.health.v1;
message HealthCheckRequest {string service = 1;
}
message HealthCheckResponse {enum ServingStatus {UNKNOWN = 0;SERVING = 1;NOT_SERVING = 2;}ServingStatus status = 1;
}
service Health {rpc Check(HealthCheckRequest) returns (HealthCheckResponse);rpc Watch(HealthCheckRequest) returns (stream HealthCheckResponse);
}

HealthCheck代码

public class HealthCheck : Health.HealthBase
{public override Task<HealthCheckResponse> Check(HealthCheckRequest request, ServerCallContext context){return Task.FromResult(new HealthCheckResponse() { Status = HealthCheckResponse.Types.ServingStatus.Serving });}public override async Task Watch(HealthCheckRequest request, IServerStreamWriter<HealthCheckResponse> responseStream, ServerCallContext context){await responseStream.WriteAsync(new HealthCheckResponse(){ Status = HealthCheckResponse.Types.ServingStatus.Serving });}
}

Program代

运行效果

运行当前程序并启动示例 1.3,浏览器访问 ,可以看到注入的Grpc服务Wing.Demo_1.4,运行效果如下图:

在示例 1.2 中调用当前Grpc服务中SayHello方法,代码如下:

[HttpGet("hello")]
public Task<string> SayHello()
{return _serviceFactory.InvokeAsync("Wing.Demo_1.4", async serviceAddr =>{var channel = GrpcChannel.ForAddress(serviceAddr.ToString());var greeterClient = new Greeter.GreeterClient(channel);var result = await greeterClient.SayHelloAsync(new HelloRequest { Name = "Wing" });return result.Message;});
}

运行示例 1.2,浏览器访问 http://localhost:1210/weatherforecast/hello ,运行效果如下图:

4、启动服务网关

服务网关是系统对外的唯一入口,它封装了系统内部架构,为每个客户端提供了定制的API,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有非业务功能。

安装依赖包

安装服务注册nuget包Wing.Consul,服务网关nuget包Wing.Gateway,选择对应的数据库驱动(参考FreeSql官网open in new window),以SqlServer为例,安装FreeSql.Provider.SqlServer,请求日志支持本地消息队列和分布式消息队列进行异步持久化,基本上不影响网关性能。如果不想记录请求日志,可以不安装该包。

如果想启用EventBus记录请求日志,需要安装RabbitMQ nuget包Wing.RabbitMQ

dotnet add package Wing.Consul
dotnet add package Wing.Gateway
dotnet add package Wing.RabbitMQ
dotnet add package FreeSql.Provider.SqlServer

Program代码

using Wing;var builder = WebApplication.CreateBuilder(args);builder.Host.AddWing(builder => builder.AddConsul());// Add services to the container.builder.Services.AddControllers();builder.Services.AddWing().AddPersistence(FreeSql.DataType.SqlServer).AddGateWay().AddEventBus();// 如果不想使用EventBus记录请求日志,可以删除此行代码var app = builder.Build();// Configure the HTTP request pipeline.app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();app.Run();

添加配置

{// 是否启用配置中心,默认启用"ConfigCenterEnabled": false,"Consul": {"Url": "http://localhost:8500","Service": {//Http  Grpc"Option": "Http","HealthCheck": {"Url": "http://localhost:1510/health",//单位:秒"Timeout": 10,//单位:秒"Interval": 10},"Name": "Wing.Demo_1.5","Host": "localhost","Port": 1510,"LoadBalancer": {//RoundRobin  WeightRoundRobin LeastConnection"Option": "WeightRoundRobin",//权重"Weight": 50},"Scheme": "http","Developer": "linguicheng"},//定时同步数据时间间隔,单位:秒 小于等于0表示立即响应"Interval": 10,//数据中心"DataCenter": "dc1",//等待时间,单位:分钟"WaitTime": 3},"ConnectionStrings": {"Wing": "Data Source=192.168.56.96;User Id=sa;Password=wing123.;Initial Catalog=Wing;TrustServerCertificate=true;Pooling=true;Min Pool Size=1"},//自动同步实体结构到数据库"UseAutoSyncStructure": true,// 如果不启用EventBus,可以删除RabbitMQ配置"RabbitMQ": {"HostName": "192.168.56.99","UserName": "admin","Password": "admin","VirtualHost": "/","Port": 5672,//消息过期时间,单位:毫秒,过期会自动路由到死信队列,小于或等于0则永久有效"MessageTTL": 0,"ExchangeName": "Sample.GateWay",//每次投递消息数量"PrefetchCount": 1},"Gateway": {// 请求日志"Log": {// 是否启用网关日志记录"IsEnabled": true,// 是否启用事件总线(RabbitMQ)存储日志,生产环境推荐启用,可以提升程序的性能"UseEventBus": false}}
}

查看运行效果

运行示例 1.2 并启动当前示例程序,浏览器访问,运行效果如下图:

运行示例 1.3,浏览器访问,可以看到网关请求日志,运行效果如下图:

服务地址组成

请求服务地址默认是{网关IP或域名}/{服务名}/{服务路由},

例如:http://localhost:1510/Wing.Demo_1.2/weatherforecast

注意 更多具体内容可以访问Wing 官方文档,具体内容如下所示

项目地址

Github:项目主页 | Wing 官方文档

Gitee:Wing: 最接地气的.NET微服务框架,支持Consul服务注册与发现,自带配置中心、链路跟踪(APM)、服务网关,支持Saga分布式事务、RabbitMQ事件总线,自带人性化的Dashboard管理面板。

文档地址:项目主页 | Wing 官方文档

示例地址:Wing.Demo: Wing微服务框架示例

开源协议:基于MIT协议永久开源免费使用

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号**[DotNet技术匠]** 社区,与其他热爱技术的同行一起交流心得,共同成长!

这篇关于最实用接地气的 .NET 微服务框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109395

相关文章

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟