从 3.1 到 5.0 —— OpenReservation 更新记

  • A+
所属分类:.NET技术
摘要

OpenReservation 是一个开源的预约系统,最初的版本是我们学校的活动室预约系统,现在正逐步变成一个更为通用的预约系统。.NET5 发布之后也是把这个项目更新到了 5.0。


OpenReservation 从 asp.net core 3.1 到 5.0

Intro

OpenReservation 是一个开源的预约系统,最初的版本是我们学校的活动室预约系统,现在正逐步变成一个更为通用的预约系统。.NET5 发布之后也是把这个项目更新到了 5.0。

这个项目是一个做了很长时间的项目,从原来的 asp.net WebForm 到 asp.net mvc 再到 asp.net core,现在不仅仅支持服务器端渲染,也支持了 Web API + SPA 的模式,
从应用部署上来说,从原来的只支持 IIS 部署,到现在支持跨平台部署,支持 docker 以及 k8s,helm 部署,从原来每次都是手动发布部署,到现在基于 Azure DevOps 的自动化 CI/CD 部署。

项目文件更新

原来的 TargetFrameworknetcoreapp3.1 的需要更新成 net5.0,原来 3.1 的包引用需要更新成 5.0,因为很多包的版本都是一样的所以我在项目根目录加了一个 Directory.Build.props 设置了一个变量,要更新的时候每次更新这个变量就可以了。

从 3.1 到 5.0 —— OpenReservation 更新记

因为从 .net5.0 开始就淡化 .net core 了,都是 dotnet,所以变量名我也从 DotNetCorePackageVersion 更新成了 DotNetPackageVersion
另外一个更新是有的 netstandad2.0 的项目更新成了 netstandard2.1,因为我要使用 efcore5.0,需要 .netstandard2.1 的 Target

从 3.1 到 5.0 —— OpenReservation 更新记

从 3.1 到 5.0 —— OpenReservation 更新记

JSON 更新

微软从 3.0 开始引入了自己的 System.Text.Json 来作为默认的 Json 序列化器,之前更新的时候觉得 System.Text.Json 的 BUG 太多,还是使用的 JSON.Net(Newtonsoft.Json),这次升级到 5.0 之后,开始使用微软的 System.Text.Json 来作为 asp.net core 的 JSON 序列化器,这样也可以少一个引用

从 3.1 到 5.0 —— OpenReservation 更新记

Startup 变更:

从 3.1 到 5.0 —— OpenReservation 更新记

Dockerfile

dockerfile 的更新在之前的文章中已经有过介绍,需要把 docker 镜像名称中的 core 去掉,然后修改 tag 从 3.1 到 5.0

从 3.1 到 5.0 —— OpenReservation 更新记

CI update

目前在用的 CI 是 Azure DevOps 和 Github Actions,需要将 Build 的 dotnet sdk 更新到 5.0,现在这两种 CI 都支持使用 5.0.x 来获取 5.0 版本的最新版本 sdk

Azure DevOps CI 变更:

从 3.1 到 5.0 —— OpenReservation 更新记

Github Actions 变更:

从 3.1 到 5.0 —— OpenReservation 更新记

More

后续更新计划:

从业务的角度来说,会支持一些更通用的预约配置,

  • 预约频次限制,每个预约项目配置每个人每天/每周/每月最多可以预约次数
  • 预约时间段允许多次预约,当前每个预约时间段只能被预约一次,有些情况允许同一个时间段多次预约,比如驾校预约,同一时间段允许多人同时预约,也需要限制,需要根据每个预约项目进行配置
    可以参考:https://github.com/OpenReservation/ReservationServer/issues/40

从技术的角度来说,之前我会把日志写到 ES 里,通过 Kibana 来做可视化,日志里也包括了一些 Metrics 之类的信息,所以后面会增加 Prometheus 和 Grafana, 将一些 Metrics 信息暴露出去,让 Prometheus 去抓取应用运行过程中暴露出来的 Metrics,通过 Grafana 做可视化展示

另外希望能够在下一个版本中增加组织(租户)的概念,每个组织可以进行一些定制化的配置,以替代现在的预约详情,现在还是老的活动室预约的打印页面

Reference