自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 ASP.NET Core —选项系统

预定义的数据注解毕竟有限,在某些验证逻辑比较复杂的情况下,数据注解可能并不能完全满足我们的需求,我们可以通过 OptionsBuilder 类中的 Validate 方法传入一个委托来实现自己的验证逻辑。// 标题中不能包含特殊字符 if(options . Title . Contains("eval")) {// 验证失败 return false;} // 验证通过 return true;});

2022-12-18 00:10:26 803 1

原创 ASP.NET Core —配置系统

一个应用要运行起来,往往需要读取很多的预设好的配置信息,根据约定好的信息或方式执行一定的行为。配置的本质就是软件运行的参数,在一个软件实现中需要的参数非常多,如果我们以 Hard Code (硬编码)的方式写在应用代码中,这样配置就会很乱,而且后续也不容易修改。乱而多,而且不容易修改,这就需要一个统一管理的地方,最常见的方式就是配置文件,这个也是开发人员非常熟悉的方式。通过配置文件设置好软件应用运行的各种参数之后,我们在开发过程中需要能够读取到配置文件的内容,根据配置内容进行软件逻辑的判断,实现完善的软件行

2022-12-04 13:34:28 1675

原创 ASP.NET Core — 依赖注入

NET Core 框架下默认提供250个以上的的服务,包括ASP.NET Core MVC、EF Core 等等,当然这些服务很多不会默认就注入到容器中,我们在新建一个项目的时候,不同项目框架的模板会帮我们默认配置好一些最基本的必须的服务,其他的服务我们可以根据自己的需要进行使用。这也是我们在日常开发中可以学习的方式,随着业务增长,需要依赖注入的服务也越来越多,我们可以根据业务模块,通过扩展方法讲相应模块的服务注入注册进行封装,命名为 Add{Services},更加清晰明了地对我们的业务进行封装。

2022-11-19 22:04:58 5030 1

原创 ASP.NET Core — 请求管道与中间件

中间件本质上是一个委托,上面的例子中我们将中间件的代码逻辑通过 Use()、Run()、Map() 等方法写在了入口文件中,这样很不优雅。我们可以对这些代码进行封装,最简单的封装方式,就是通过一个静态类将相关的代码写成静态方法,在 Use() 等方法中只需要传入静态方法即可。但是这种方法一样不够优雅,我们可以模仿微软内置中间件和一些第三方组件提供的中间件的封装方式。例如,静态文件中间件的实现源码:其实对于中间件的封装,可以不实现某个接口,但是它有一套约定的规则。

2022-11-07 22:34:28 1789

原创 ASP.NET Core — 入口文件

根据顶级语句语法,顶级语句文件中存在隐式 using 指令, 但如果我们需要在 Program.cs 文件中额外引入一些命名空间也是可以的,using 语句需要在文件的最前面,也可以定义方法或者类,只不过需要在顶级语句的后面,也可以使用异步方法。从代码中可以看到,在对主机进行配置的时候,使用到了 Startup 类,在 .NET 6 之前的版本,Startup 类承担应用的启动任务,是应用配置的主要地方。○ 该方法内中间件的注册顺序与代码的书写顺序是一致的,先注册的先执行,后注册的后执行。

2022-11-07 22:11:51 852

原创 记FreeSql查询缓慢的一种情况

大佬也觉得奇怪,远程过来帮我们调试了一下,刚开始也没有太多的头绪,但却肯定了ado模式使用脚本查询,和Code First模式查询的实体转换逻辑是不一样的,后来我们注意到,在数据查询那一行语句执行的过程中,输出一直在输出异常,而且是类型转换失败的异常。果然,查询脚本在数据库中执行是很快的。这时候就怀疑是不是网络传输啊,或者暂时不知道的因素导致的了,不管怎么样,先测试一下相同的脚本在代码里面执行起来怎么样吧,虽然觉得不会有什么区别,毕竟脚本本来就是有FreeSql生成的。

2022-10-29 15:57:44 1046

原创 DevOps—基于Jenkins构建.Net Core应用自动化流程

前一篇文章演示了怎么基于 Jenkins 自动化构建发布一个前端工程,接下来将演示基于 Jenkins 构建发布一个后端应用,我主要使用的开发语言就是 .Net Core,这里以 .Net Core 为示例。

2022-10-08 22:44:57 1543

原创 DevOps—基于 Jenkins 构建 Vue 前端工程自动化流程

这里需要新增 SSH Server,就像平常通过 ssh 连接远程服务器一样,需要填写名称、远程机器 ip,远程机器登录账号,其中的远程机器目录可以填写,这个路径必须在远程机器中已存在,不存在不会自动创建,填写之后后面传输文件时,文件的路径就相对于这个路径,否则就相对于账号的家目录。也可以通过配置页面的流水线语法链接,调整到 Jenkins 的帮助文档,里面有一个代码片段生成器,可以帮助生成一些基本操作的代码,这里生成的代码一般不要更改,包括换行,直接拷到 jenkinsfile 中使用即可。

2022-10-08 22:27:36 2076

原创 DevOps— CI/CD 工具 Jenkins

Jenkins 是一个基于Java的跨平台开源 CI/CD 工具,可以用来自动执行与构建、测试和交付或部署软件相关的各种任务,支持实时测试和报告,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

2022-10-07 19:36:02 712

原创 DevOps—源码管理工具Gitlab

在自动化构建的过程中,总是需要将我们开发的应用的源码拉取到服务器中进行生成、发布、测试操作,之后再推送到目标服务器上进行部署应用。这就需要我们拥有一个在线保存开发过程中的源代码的地方,也就是源代码管理服务器。GitLab 是一个开源的源代码管理应用,支持私有化部署安装,对于 GitLab 大家都应该很熟悉,就算大家实际工作中不涉及 DevOps 相关技术,没有用过 GitLab,相信也必然用过类似的工具,开发团队协助中一个源代码管理工具必然是必不可少的。,各种文档请参考官网。

2022-10-07 15:19:31 1635

原创 DevOps—基本概念

这是这个行业演变过程,也是一个公司从成立,到发展壮大的过程,一个公司的项目管理模式演变过程是整个行业演变过程的缩影,不同阶段有不同阶段的模式,达到一定阶段才有改变的必要,不过我们如果提前有这些了解,提前有所准备,那边在转变的过程中就可以少些弯路和内耗。再后来,随着项目的再次扩大,用户对系统的需求不断增加,与此同时,用户给的时间周期却越来越少,时间周期比较长的瀑布流模式不再适用,于是就出现了“敏捷开发”,为的就是小步快跑,持续迭代,快速发现问题,快速解决问题,快速和用户、业主进行确认。

2022-10-06 22:16:45 8046 2

原创 容器技术—docker stack

在之前的几篇文章中,我们介绍了Docker Compose,它是用来进行一个完整的应用程序相互依赖的多个容器的编排的,但是缺点是不能在分布式多机器上使用;我们也介绍了Docker swarm,它构建了docker集群,并且可以通过docker service在不同集群节点上运行容器服务,但是缺点是不能同时编排多个服务。但是在实际的生产开发中,我们一个完整的应用需要的服务往往不止一个,通过docker service 命令来部署的话会很麻烦,所以这里要讲一下 Docker Stack,它用于向swarm集群部

2022-06-22 22:45:17 8678

原创 容器技术—docker swarm(二)

基于docker swarm的docker集群已经搭建完成,我们的目的是要在集群中部署应用。swarm集群部署应用最基本的命令是docker service,它的使用方式类似于docker container(也就是我们一直用的docker命令,docker命令是docker container的简写),也和docker container命令一样适合部署单个应用,不能进行编排,只不过一个是用于单机,一个用于集群。下面以在swarm集群中部署nginx为例:默认的情况下,管理节点也是一个工作节点,服务也会部

2022-06-18 22:15:38 3091

原创 容器技术—docker swarm(一)

我们的应用随着业务的扩展,从开始的单体架构,到分布式架构,再到微服务架构,其中的核心理念就是用资源换取性能。单台服务器的性能是由瓶颈的,随着业务的扩展、访问量的增大、计算量的增大,IO读写需求的增大,逐渐无法支撑,于是便通过集群技术将多台机器构成集群,调度集群内的多台服务器协同进行工作,以满足应用运行的需要,提升应用的性能。这是分布式架构的基本思想。这里的关键技术就是集群技术。集群是一组相互独立的、通过高速网络互联的计算机构成了一个组,并以单一系统的模式加以管理。每个集群节点都是运行其自己进程的一个独立服务

2022-06-18 15:22:52 2066

原创 容器技术—docker compose

在微服务架构下,我们后端会有许许多多的服务,这些服务之间可能会存在一定的依赖关系,或者会依赖一些第三方的应用容器,在生产环境中我们不可能通过docker命令一个一个地拉取镜像、启动容器,那样做将是一件非常费时费力的事情。想象一下,当我们有几十上百个甚至几百个服务时,需要一个一个的启动,那样子重复性的工作简直让人奔溃。这里介绍一下docker compose,它能够在一定程度上解决上述的困境。Compose 项目是 Docker 官方的开源项目,是用于定义和运行多容器 Docker 应用程序的工具,负责实现对

2022-06-03 20:54:41 3446

原创 容器技术—.net core on docker

容器技术—.net core on docker1. 开发环境使用docker调试2. Dockerfile2. 1. FROM: 指定基础镜像2.2 RUN: 执行shell命令2.3 COPY:复制文本2.4 ADD:复制和解包文件2.5 CMD:容器启动命令2.6 ENTRYPOINT:入口点2.7 ENV:设置环境变量2.8 ARG:构建参数2.9 VOLUME:挂载点2.10 XPOSE:暴露端口2.11 WORKDIR:指定工作目录3. docker发布3.1 镜像移植3.2 release发

2022-05-28 23:22:06 965

原创 容器技术—docker基础

容器技术—docker基础1. 容器化技术1.1 什么是容器化技术?1.2 为什么会有容器化技术1.3 虚拟化和容器化1.4 容器化的优势2. Docker2. 1 什么是docker2.2 docker架构3. docker安装4. docker常用命令命令1. 容器化技术1.1 什么是容器化技术?容器化技术是指为应用程序提供标准化、可移植的打包的技术。就像运输行业使用物理容器来隔离不同的货物,以便通过轮船和火车运输,软件开发技术也越来越多地使用一种称为容器化的方法。标准软件包 (也称为容器) 将

2022-05-24 00:06:41 1973

原创 分布式日志—Seq(二)

分布式日志—Seq(二)3. docker容器日志集成Seq3.1. GELF格式3.2. 收集doccker日志4. 日志分析4.1. 普通查询4. 2. @关键字结合运算符过滤4. 3. 属性过滤4. 4. sql查询5. 日志管理5.1 保留策略话接上回哈,这一篇是对上一篇没有讲完整的seq功能的补充介绍。3. docker容器日志集成Seq3.1. GELF格式GELF(Graylog 扩展日志格式)是s一种结构化日志事件格式,用于许多编程语言中的日志记录库。Seq可以通过TCP和UDP

2022-05-16 00:12:09 1901

原创 分布式日志—Seq(一)

分布式日志—Seq(一)一、分布式日志二、Seq1. 安装部署1.1. docker部署1.2. windows部署2. .net core集成Seq2.1. Api key2.1.1 创建Api key2.2. 集成2.2.1 新建一个.net 6下的Web Api工程2.2.2 配置serilog2.3. Http接入与CLEF格式一、分布式日志日志是我们软件开发离不开的一个东西,在我们排查问题的时候日志就是我们的救命稻草。在分布式应用中,每个服务都在不停的生产日志,如果按照传统的写本地文件的日志方

2022-05-15 20:56:51 4999 1

原创 分布式跟踪—SkyWalking

分布式跟踪—SkyWalking基本介绍部署1. 安装2. 配置数据存储.net core 集成Skywalking基本介绍在大型网站系统设计中,随着分布式架构,特别是微服务架构的流行,我们将系统解耦成更小的单元,通过不断的添加新的、小的模块或者重用已经有的模块来构建复杂的系统。随着模块的不断增多,一次请求可能会涉及到十几个甚至几十个服务的协同处理,那么如何准确快速的定位到线上故障和性能瓶颈,便成为我们不得不面对的棘手问题。SkyWalking是一款APM(应用性能管理),包括了分布式追踪、性能指标分

2022-05-11 23:58:58 1201 6

原创 API网关—Ocelot之限流熔断

API网关—Ocelot之限流熔断限流熔断限流在微服务架构下,若大量请求超过微服务的处理能力时,可能会将服务打跨,甚至产生雪崩效应、影响系统的整体稳定性。比如说你的用户服务处理能力是1w/s,现在因为异常流量或其他原因,有10w的并发请求访问你的服务,那服务肯定扛不住啊。这种情况下,我们可以在流量超出承受阈值时,直接进行”限流”、拒绝部分请求,从而保证系统的整体稳定性。Ocelot提供限流功能,这个功能是由张善友大大贡献的,只要通过配置就可以实现,我们可以将以下配置放在全局配置中。 "RateLim

2022-04-19 00:42:16 1094

原创 API网关—Ocelot之负载均衡

API网关—Ocelot之负载均衡负载均衡请求缓存负载均衡分布式架构中,当后端同一个应用的实例较多,负载均衡是非常必要的,否则前端对后端API的请求,可能只命中其中的几个应用实例,这几个实例压力会很大,而其他实例一直处于空闲状态,达不到分布式架构中利用服务器资源换取性能的效果。Ocelot网关提供了负载均衡功能,通过配置文件即可实现,下面是Ocelot负载均衡功能的demo。启动CustomerService的两个实例,修改以下之前的演示api让其放回不同的结果启动实例1:启动实例2:

2022-04-19 00:37:05 1913

原创 API网关—Ocelot之服务发现

API网关—Ocelot之服务发现集成Consul集成nacos动态路由扩展Ocelot对注册中心的适配通过配置文件,我们可以设定路由规则模板,Ocelot网关会将接收到的符合规则的请求转发到下游服务,再从后端http service获取响应(Response)后,再返回给客户端。这样子外部应用就不需要记住每个service所在的IP和端口,而是只需要告诉网关需要消费哪个service即可。但是对于众多的微服务,如果我们都一一硬编码地配置其IP和Port在配置文件中,不适合微服务架构的风格,因为众多的服

2022-04-19 00:29:57 1881

原创 API网关—Ocelot

API网关—OcelotAPI网关OcelotOcelot的基本使用API网关我们知道在微服务架构中,后端会有许许多多的服务实例,但是在UI上进行展示的时候,我们通常需要在一个界面上展示很多数据,这些数据可能来自于不同的微服务中。这就会出现一下的这种情况:这种情况下,前端UI展示需要知道数据来源于哪个服务,需要知道每一个服务的ip和端口,但是按照微服务的设计原则,服务的划分是随时间变化的,服务实例也是可以伸缩的,也就是后端接口的IP和端口是不固定的,这将会导致前端UI展示多了很多不确定的因素。而A

2022-04-19 00:17:16 1373

原创 配置中心—Consul配置管理

配置中心—Consul配置管理Consul Key/Value存储.Net Core集成Consul配置中心Consul Key/Value存储Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布式一致性协议实现、健康检查、Key/Value 存储(配置中心)、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等),使用起来也较为简单。请注意这里,C

2022-04-19 00:05:54 8617

原创 配置中心—nacos配置中心

配置中心—nacos配置中心配置中心Nacos配置中心Nacos配置中心集群工作原理Nacos配置中心的使用.net core集成Nacos配置中心配置中心应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。应用程序根据配置改变自身的行为,但一般程序不会去修改配置对于配置,大家在日常开发中应该很熟悉。配置的加载有多种方式,其中hard code在应用中的方式最不可取的,而配置文件、环境变量、启动参数、甚至数据库的方式,在微服务架

2022-04-18 23:49:25 5151

原创 服务间的通讯-WebApiClient

服务间的通讯-WebApiClientWebApiClient的基本使用结合nacos实现服务接口调用WebApiClient核心实现源码研究声明式REST Api客户端能够帮助我们在日常开发中减少很多构建HttpClient处理请求的工作,减少对业务代码的侵入。前文介绍了工作中自己实现的REST Api代理,其实.net 体系也有一个比较好用的开源REST Client,是大大老九写的 WebApiClient。比较了一下,自己实现的REST Api客户端和WebApiClient在使用上基本类似,不

2022-04-16 23:59:29 1865

原创 服务发现—Asp.net core 结合consul实现服务发现

服务发现—Asp.net core 结合consul实现服务发现Asp.net core通过api方式实现consul服务注册与发现Consul 服务发现服务注册与发现作为微服务基础设施中的一部分,应该是低代码侵入,只需要通过简单的配置就可开箱即用,普通业务开发人员无需关注的功能,不然的话,服务较多,服务实例较多的情况下,服务的管理将牵扯开发人员很大的精力。consul的服务注册有两种方式,一种是通过client agen结合配置文件进行主动注册,一种通过api的方式进行注册,个人倾向于api方式,可以

2022-04-16 23:08:51 2379

原创 服务发现—Consul部署

服务发现—Consul部署基础介绍安装centos下安装集群搭建docker下安装windows下安装基础介绍Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等),使用起来也较 为简单。Consul用Golang实现,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方

2022-04-16 22:51:02 3028

原创 服务发现—Asp.net core结合nacos实现服务发现

服务发现—Asp.net core结合nacos实现服务发现Asp.net core通过api方式实现nacos服务注册Nacos 服务发现Nacos注册中心分为server与client,server采用Java编写,为client提供注册发现服务与配置服务。而client可以用多语言实现,client与微服务嵌套在一起,.net 版本客户端在github上已经有开源sdk实现:nacos-sdk-csharp 。Asp.net core通过api方式实现nacos服务注册通过nacos管理平台

2022-04-16 22:26:24 3223

原创 1. 服务发现—nacos部署

服务发现—nacos部署基础介绍安装在CentOS下安装docker安装window安装集群搭建基础介绍Nacos是阿里巴巴推出的开源工具,提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。Nacos注册中心分为server与client,server采用Java编写,为client提供注册发现服务与配置

2022-04-16 22:07:25 2011

原创 ABP 依赖注入(2)

ABP 依赖注入(2) 依赖注入的使用构造方法注入属性注入从IServiceProvider解析服务Autofac的使用容器替换拦截器与动态代理接上一篇哈,链接ABP 依赖注入(1)依赖注入的使用构造方法注入这是将服务注入类的最常用方法,是将依赖项注入类的首选方式,也是微软推崇的模式。这样,除非提供了所有构造方法注入的依赖项,否则无法构造类,显示的声明了类必需的服务,使开发人员一目了然。public class BookAppService : ApplicationService{

2021-03-18 00:44:14 1241

原创 ABP 依赖注入(1)

ABP 依赖注入(1) Abp依赖注入的配置方式手动注册依赖注入关系按照约定自动注册通过特性注册泛型类的注册依赖注入实现了系统之间、模块之间和对象之间依赖关系的解耦,基本上是现代应用程序框架必不可少的一个组成部分。ABP的依赖注入系统是基于Microsoft的依赖注入扩展库(Microsoft.Extensions.DependencyInjection),所以能够完全兼容.net Core中的依赖注入的用法,同时使用 Autofac 替换了.net Core中的内部容器,利用了Autofac中的一些

2021-03-18 00:26:02 1671

原创 ABP 模块加载机制

ABP 模块加载机制 理解模块模块化的实现Volo.Abp.Core 核心包模块加载过程Abp是一个基于模块化开发的应用程序框架,提供了模块化基础的架构和模块化加载的引擎。理解模块一个模块是对一个功能点的封装,可以独立成为一个包,实现了松耦合的代码组织方式。Abp框架的基本思想就是模块开发,模块就想乐高中的一块块积木,在项目中将不同功能点的模块引用进来,就像搭积木一样构建成一个成品。模块化的实现通过在一个程序集中,创建一个模块类,继承AbpModule类,就可以很简单的将这个程序集作为Abp框

2021-03-13 22:56:35 2546 14

原创 异步编程Task、Async、await

异步编程Task、Async、await自从C# 5.0时代引入async和await关键字后,异步编程就变得流行起来。尤其在现在的.NET Core时代,我们的代码中更是充斥着async、Task和await关键字。这种异步编程的方式无侵入式的,和同步的代码的写法没什么区别,不用我们像以前一样用Thread去开启子线程。使用异步编程的方式,在执行一些如数据库操作、IO操作、Http调用这些耗时操作时,能够提高我们代码的性能,它能够更好的调用机器的CPU、IO寄存器等硬件同时工作,而不用阻塞整个应用程序

2021-03-11 22:48:32 760

原创 1. 初识ABP

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-03-09 23:46:14 2087 2

原创 我的第一篇文章:.net 平台性能测试工具BenchmarkDotNet

.net 平台性能测试工具BenchmarkDotNet写在前面的话在CSDN逛了好几年,平常工作中也受到了好多大佬博文的帮助,平时这些东西都是写在onet note,如今有空也想自发表一下文章,记录下一些学习和工作的内容,也希望能够帮到别人。以下正文BenchmarkDotNet最近因为项目需要,在写业务算法类库,里面对数据修约要求比较严格,为了保留位数正确,在计算过程中需要多次进行Decimal和string的转换,担心太多的转换操作会导致性能变差,于是就想到对代码做一下性能测试,网上

2021-02-28 16:21:21 726

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除