.NET 微服务入门

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET 微服务入门相关的知识,希望对你有一定的参考价值。

前置条件

  1. 安装 .NET SDK (目前.NET 7.0) 2023年6月10日
  2. 安装Docker

前置条件自己搞定。

检查.NET 和Docker 是否安装成功

#查看.NET 是否安装成功
dotnet --version

#查看 Docker 是否安装成功
docker --version

说明:
由于我这边安装了最新.NET 8 预览版所以显示的是最新的版本。具体看自己的安装版本。

创建服务

可以使用 .NET CLI 命令创建或 VS 创建。

这里直接用 .NET CLI 命令创建

dotnet new webapi -o MyMicroservice --no-https -f net7.0

** 命令说明 :
dotnet 命令:创建一个 webapi 项目
-o 参数:创建 文件夹名 MyMicroservice 用于存放这个项目。
--no-https:** 表示不使用 HTTPS证书。
-f:表示要创建 .NET 7 的应用

cd MyMicroservice

命令说明:
切换到 MyMicroservice 目录。

运行服务

dotnet run

浏览器访问接口:
http://localhost:/WeatherForecast

添加 Docker 元数据

为了运行 Docker 镜像,我们需要一个 Dockerfile 文件。这个文件包含了如何构建我们的应用的镜像的说明。

Docker 镜像包含了作为 Docker 容器运行应用程序所需的内容。

**PS: **挖个坑,写一篇 Docker 相关的文章。

在我们应用的项目文件夹下创建 Dockerfile
(在 MyMicroservice 文件夹下面)

文件名一定要叫 Dockerfile。

fsutil file createnew Dockerfile 0
start Dockerfile

将如下内容拷贝到 Dockerfile

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY MyMicroservice.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyMicroservice.dll"]

PS:再挖个坑,写一篇 Dockerfile 相关的文章。
可选项:添加 .dockerignore 文件
.dockerignore 文件是为了在执行 docker build 命令时减少不必要的文件,从而加快构建速度。

fsutil file createnew .dockerignore 0
start .dockerignore

将下面内容拷贝到 .dockerignore 中。

Dockerfile
[b|B]in
[O|o]bj

创建 Docker 镜像

docker build -t mymicroservice .

命令说明:、
docker build:使用 Dockerfile 去构建 Docker 镜像
**-t mymicroservice 参数:镜像名称为 mymicroservice
最后一个参数告诉使用哪个目录来查到 Dockerfile
(
. **指定当前工作目录)

创建完成结果:

构建完成后看一下本机的可用镜像有哪些

docker images

运行 Docker 镜像

docker run -it --rm -p 3000:80 --name mymicroservicecontainer mymicroservice

查看 当前正在运行的 docker 镜像

docker ps

.NET 入门到高级路线

.NET 入门到高级路线

  1. c# 基础语法

  2. .NET Core 基础知识

  • ASP.NET Core 基础知识概述

  • Blazor

ORM

  • freesql

  • Entity Framework Core

  • Dapper

关系型数据库

  • SQL Server

  • MySql

  • PostgreSQL

中间件

  • mongodb

  • Redis

  • Rabbitmq

  • ActiveMQ

  • Kafka

  1. 运维

  • Docker

  • Docker Compose

  • Drone

  • CI/CD

微服务

应用框架

  • ABP

CSharp基础语法

微软官方教程地址 :

b站视频:

刘铁猛《C#语言入门详解》:[https://www.bilibili.com/video/BV13b411b7Ht/?spm_id_from=333.337.search-card.all.click]

C#语言入门详解:[https://www.bilibili.com/video/BV1wx411K7rb/?spm_id_from=333.337.search-card.all.click]

.NET Core 基础知识

微软官方教程地址:[https://learn.microsoft.com/zh-cn/aspnet/core/web-api/?WT.mc_id=dotnet-35129-website&view=aspnetcore-7.0]

.NET 6教程,https://www.bilibili.com/video/BV1pK41137He/?spm_id_from=333.337.search-card.all.click

ASP.NETCore基础知识概述

  • 依赖关系注入

  • 中间件

  • 配置

  • 选项

  • 环境

  • Logging

  • 路由

  • 处理错误

  • 静态文件

Blazor

Blazor 是一个使用 Blazor 生成交互式客户端 Web UI 的框架:

  • 使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI。

  • 共享使用 .NET 编写的服务器端和客户端应用逻辑。

  • 将 UI 呈现为 HTML 和 CSS,以支持众多浏览器,其中包括移动浏览器。

  • 与新式托管平台(如 Docker)集成。

  • 使用 .NET 和 Blazor 生成混合桌面和移动应用。

使用 .NET 进行客户端 Web 开发可提供以下优势:

  • 使用 C# 代替 JavaScript 来编写代码。

  • 利用现有的 .NET 库生态系统。

  • 在服务器和客户端之间共享应用逻辑。

  • 受益于 .NET 的性能、可靠性和安全性。

  • 使用开发环境(例如 Visual Studio 或 Visual Studio Code)保持 Windows、Linux 或 macOS 上的工作效率。

  • 以一组稳定、功能丰富且易用的通用语言、框架和工具为基础来进行生成。

Blazor UI框架推荐

-  Masa Blazor *作者推荐 

- Bootstrap Blazor

- Ant Design Blazor

- MatBlazor

- Radzen Blazor

ORM

freesql

是一款功能强大的对象关系映射(O/RM)组件,支持 .NET Core 2.1+、.NET Framework 4.0+ 以及 Xamarin✨

EntityFrameworkCore

Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。

Dapper

Dapper是由Stack Overflow背后的团队创建的micro-ORM。Dapper 是 .NET 的简单对象映射器,在速度方面拥有 Micro ORM 之王的称号,几乎与使用原始 ADO.NET 数据读取器一样快。ORM是一个对象关系映射器,负责数据库和编程语言之间的映射。

关系型数据库

SQLServer

SQL Server是由Microsoft开发和推广的**关系数据库管理系统(DBMS)**;SQL Server使用方便,伸缩性好与相关软件集成程度高;SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能。

MySql

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

PostgreSQL

PgSQL PostgreSQL 的历史简介. 现在被称为 PostgreSQL 的对象- 关系型数据库管理系统 (有一段时间被称为 Postgres95)是从伯克利写的 POSTGRES 软件包发展而来的。. 经过十几年的发展, PostgreSQL 是世界上可以获得的最先进的 开放源码 的 数据库系统 , 它提供了多版本并行控制,支持几乎所有 SQL 构件 (包括 子查询 , 事务 和用户定义类型和函数), 并且可以获得非常广阔范围的(开发)语言绑定(包括 C,C++,Java,perl,tcl,和 python)

中间件

中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。它并没有很严格的定义,但是普遍接受IDC的定义:中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。从这个意义上可以用一个等式来表示中间件:中间件=平台+通信,这也就限定了只有用于分布式系统中才能叫中间件,同时也把它与支撑软件和实用软件区分开来。

mongodb

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

Redis

REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

Rabbitmq

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

ActiveMQ

Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。

Kafka

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。

运维

Docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

DockerCompose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Drone

Drone是为繁忙的开发团队提供的自助持续集成平台。

CI/CD

CI 持续集成(Continuous Integration) 协同开发是目前主流的开发方式,也就是多位开发人员可以同时处理同一个应用的不同模块或者功能。

但是,如果企业计划在同一天,将所有开发分支代码集成在一起,最终可能会花费很多时间和进行很多重复劳动,费事费力。因为代码冲突是难以避免的。

如果开发人员本地的环境和线上不一致的话,那么这个问题就更加复杂了。

持续集成(CI)可以帮助开发者更加方便地将代码更改合并到主分支。

一旦开发人员将改动的代码合并到主分支,系统就会通过自动构建应用,并运行不同级别的自动化测试(通常是单元测试和集成测试)来验证这些更改,确保这些更改没有对应用造成破坏。

如果自动化测试发现新代码和现有代码之间存在冲突,CI 可以更加轻松地快速修复这些错误。

CD 持续交付(Continuous Delivery) CI 在完成了构建、单元测试和集成测试这些自动化流程后,持续交付可以自动把已验证的代码发布到企业自己的存储库。

持续交付旨在建立一个可随时将开发环境的功能部署到生产环境的代码库。

在持续交付过程中,每个步骤都涉及到了测试自动化和代码发布自动化。

在流程结束时,运维团队可以快速、轻松地将应用部署到生产环境中。

CD 持续部署(Continuous Deployment) 对于一个完整、成熟的 CI/CD 管道来说,最后的阶段是持续部署。

它是作为持续交付的延伸,持续部署可以自动将应用发布到生产环境。

实际上,持续部署意味着开发人员对应用的改动,在编写完成后的几分钟内就能及时生效(前提是它通过了自动化测试)。这更加便于运营团队持续接收和整合用户反馈。

总而言之,所有这些 CI/CD 的关联步骤,都极大地降低了应用的部署风险。

不过,由于还需要编写自动化测试以适应 CI/CD 管道中的各种测试和发布阶段,因此前期工作量还是很大的。

微服务

一种软件开发技术- 面向服务的体系结构(SOA)架构样式的一种变体,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建。

应用框架

ABP

ABP是一个开源且文档友好的应用程序框架。ABP不仅仅是一个框架,它还提供了一个最徍实践的基于领域驱动设计(DDD)的体系结构模型,可以支持.net framework和.net core两种技术流派。

ABP 框架特点

  • 依赖注入,这个部分使用 Castle windsor (依赖注入容器)来实现依赖注入,这个也是我们经常使用IOC来处理的方式;

  • Repository仓储模式,已实现了Entity Framework、NHibernate、MangoDB、内存数据库等,仓储模式可以快速实现对数据接口的调用;

  • 身份验证与授权管理,可以使用声明特性的方式对用户是否登录,或者接口的权限进行验证,可以通过一个很细粒度的方式,对各个接口的调用权限进行设置;

  • 数据有效性验证,ABP自动对接口的输入参数对象进行非空判断,并且可以根据属性的申请信息对属性的有效性进行校验;

  • 审计日志记录,也就是记录我们对每个接口的调用记录,以及对记录的创建、修改、删除人员进行记录等处理;

  • Unit Of Work工作单元模式,为应用层和仓储层的方法自动实现数据库事务,默认所有应用服务层的接口,都是以工作单元方式运行,即使它们调用了不同的存储对象处理,都是处于一个事务的逻辑里面;

  • 异常处理,ABP框架提供了一整套比较完善的流程处理操作,可以很方便的对异常进行进行记录和传递;

  • 日志记录,我么可以利用Log4Net进行常规的日志记录,方便我们跟踪程序处理信息和错误信息;

  • 多语言/本地化支持,ABP框架对多语言的处理也是比较友好的,提供了对XML、JSON语言信息的配置处理;

  • Auto Mapping自动映射,这个是ABP的很重要的对象隔离概念,通过使用AutoMaper来实现域对象和DTO对象的属性映射,可以隔离两者的逻辑关系,但是又能轻松实现属性信息的赋值;

  • 动态Web API层,利用这个动态处理,可以把Application Service 直接发布为Web API层,而不需要在累赘的为每个业务对象手工创建一个Web API的控制器,非常方便;

  • 动态JavaScript的AJax代理处理,可以自动创建Javascript 的代理层来更方便使用Web Api,这个在Web层使用。

ABP 框架特别的功能

  • 多租户支持(每个租户的数据自动隔离,业务模块开发者不需要在保存和查询数据时写相应代码;

  • 软删除支持(继承相应的基类或实现相应接口,会自动实现软删除)

  • 系统设置存取管理(系统级、租户级、用户级,作用范围自动管理)

  • EventBus实现领域事件(Domain Events)

  • 模块以及模块的依赖关系实现插件化的模块处理等等

结尾

欢迎大佬继续补充,壮大dotnet生态!

来着token的分享

技术交流群:737776595

以上是关于.NET 微服务入门的主要内容,如果未能解决你的问题,请参考以下文章

微服务-springcloud

微服务SpringCloud之服务注册与发现

.NET 入门到高级路线

gRPC入门与实操(.NET篇)

微服务和 SpringCloud(第二季)

为啥选择Spring Boot作为微服务的入门级微框架