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 设置了一个变量,要更新的时候每次更新这个变量就可以了。

因为从 .net5.0 开始就淡化 .net core 了,都是 dotnet,所以变量名我也从 DotNetCorePackageVersion 更新成了 DotNetPackageVersion

另外一个更新是有的 netstandad2.0 的项目更新成了 netstandard2.1,因为我要使用 efcore5.0,需要 .netstandard2.1 的 Target

JSON 更新

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

Startup 变更:

Dockerfile

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

CI update

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

Azure DevOps CI 变更:

Github Actions 变更:

More

后续更新计划:

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

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

    可以参考:https://github.com/OpenReservation/ReservationServer/issues/40

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

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

Reference

从 3.1 到 5.0 —— OpenReservation 更新记的更多相关文章

  1. plain framework 1 1.0.4 更新 稳定版发布

    PF由于各种因素迟迟不能更新,此次更新主要是更新了以往和上个版本出现的内存问题,该版本较为稳定,如果有用到的朋友请更新至此版本. PF 1.0.4 修复1.0.0.3更新后产生的内存问题,可能导致网络 ...

  2. docker管理shipyard中文版v3.0.2更新

    shipyard中文版v3.0.2更新  https://console.dockerclub.net/ https://dockerclub.net/docs/intro/getting_start ...

  3. struts2-core-2.0.14更新到2.3.15

    struts2-core-2.0.14更新到2.3.15 将低版本的struts2-core更新到最新版本2.3.15,更新jar包,有这个几个 1. struts2-core-2.0.14.jar ...

  4. IntelliJ Idea 常用快捷键总结-0 #<间断性更新中...>,部分有示例

    IntelliJ Idea 常用快捷键总结-0 <间断性更新中...>,部分有示例 自动补齐代码 常用的有for循环体,fori可以输出循环语句: eg: public void test ...

  5. Selenium 4.0 Alpha更新实践

    上期讲到了Selenium 4.0 Alpha更新日志,这次来实践一下更新内容. DevTools操作更加方便. Chrome录制更加方便.(未实践) 窗口管理不在依赖一个driver. 相对定位器功 ...

  6. ADFS 4.0 证书更新

    ADFS 4.0 证书更新 由于公网证书的过期,需要重新更新ADFS的服务通信证书: 证书要求: 带私钥 PFX格式 更换流程: 证书安装到 证书\计算机\个人,安装后点开证书能看到"你有一 ...

  7. Docker 1.13.0 详细更新日志

    本文讲的是Docker 1.13.0 详细更新日志[编者的话]Docker发布1.13.0版本,此次版本更新内容较多,以下为该版本具体的变更. 构建 添加在构建时可以指定镜像用作高速缓存源的功能. 这 ...

  8. plain framework 1 1.0.3更新 优化编译部分、网络压缩和加密

    有些东西总是姗姗来迟,就好比这新年的钟声,我们盼望着新年同时也不太旧的一年过去.每当这个时候,我们都会总结一下在过去的一年中我们收获了什么,再计划新的一年我们要实现什么.PF并不是一个十分优秀的框架, ...

  9. 关于SubSonic3.0插件更新字符串过长引发的System.Data.SqlClient.SqlException的异常修复

    最近公司客服提交了个BUG,说是更新产品详细信息时,有的可以有的更新不了,前段时间一直没空所以暂时放下,刚才又出现这个问题,所以马上处理了一下. 打开项目解决方案,进入DEBUG模式,拿到操作的数据提 ...

  10. java-int类型:int默认为0导致更新操作未赋值的情况下将值更新为0

    日常开发中,做更新操作的时候的处理方法为:当这个字段有值则更新,没有值就不更新,在mybatis的xml中表现为: <!-- 修改记录,只修改只不为空的字段 --> <update ...

随机推荐

  1. Bootstrap之栅格系统

    bootstrap 移动优先 中文官网  http://www.bootcss.com/ 1.基本模板 <!DOCTYPE html> <html lang="en&quo ...

  2. webform LinQ

    LINQ,语言集成查询(Language Integrated Query)是一组用于c#和VB语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据. 他是一个 ...

  3. Paros抓包工具

    http://www.hackbase.com/article-1593-1.html http://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1& ...

  4. centos 安装FTP server详情(转)

    centos 安装FTP server详情 分类: linux 2013-12-27 16:45 227人阅读 评论(0) 收藏 举报 我们这里以安装vsftpd 服务器端为例子: 1.进入到cent ...

  5. 572. Subtree of Another Tree(easy)

    Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and no ...

  6. salt Rosters

    salt除了支持Master 和Minion方式之外,还支持SSH; SSH方式因为没有minion主动连接master,所以需要维护 roster,提供master可以操作的对象;roster的配置 ...

  7. Google&#39;s Machine Learning Crash Course #04# First Steps with TensorFlow

    1.使用 TensorFlow 的建议 Which API(s) should you use? You should use the highest level of abstraction tha ...

  8. 利用python库计算person相关系数

    使用numpy库,可以实现person相关系数的计算,例如对于矩阵a. a Out[235]: array([[1, 1, 2, 2, 3], [2, 2, 3, 3, 5], [1, 4, 2, 2 ...

  9. 一次聊天引发的思考--java并发包

    一次聊天,谈到了死锁的解决.可重入锁等等,突然发现这些离自己很远,只有一些读书时的概念涌入脑海,但各自的应用场景怎么都无法想出.痛定思痛,决定看看concurrent包里涉及并发的类及各自的应用场景. ...

  10. CSS 样式属性

    大小 width   宽               body {   min-width:1200px; height  高                      }               ...