#

【Net Core系列】(前言).net core学习笔记

IOC:

1.解耦
2.屏蔽细节。
DI依赖注入,是实现IOC的手段。
DI:构造对象,能自动把依赖的对象生成并传入,支持递归无限级的。
IOC是目标,DI是手段。

net core生命周期:

AddTransient //瞬时生命周期
AddSingleton //单例:全程唯一实例
AddScoped   //作用域单例,一个请求一个实例
单例:没有线程单例,不建议太多单例,多个线程对单例操作,线程不安全。
适合单例:配置文件、容器实例、连接池、线程池
Scope:一次Http请求就是一个实例,一次请求创建一个容器实例
瞬时:大部分场景使用瞬时生命周期

切面编程AOP:Aspect Oriented Programming

通过预编译方式和运行期动态代理实现程序功能的统一维护的一种方式

  • 中间件
  • 过滤器
  • 拦截器

什么时候使用AOP:不是业务逻辑的逻辑。
相比OOP:OOP不能为分散的对象引入公共行为。

切面编程应用场景:日志、事务、缓存、异常处理、性能优化

AOP异常
三种方法:1.直接用特性 2.用内置的ServiceFilter 3.全局注册AddControllersWithViews
AOP的使用

  • 使用Autofac:引用动态代理、设计拦截器、注入拦截器、拦截器服务的列表分配给注册(引入Autofac.Extensions.DependencyInjection:依赖注入;引入Autofac.Extras.DynamicProxy:动态代理)
  • 自定义动态代理

中间件、过滤器、AOP拦截器区别与联系

名称 级别 拦截 拦截机制 根本区别
中间件 Http 管道
过滤器 Http url,Controller里的action 只是一个前置条件判断,只能过滤请求,并不能对url中的service调用产生影响
拦截器 对象的元数据(类、方法名、参数等) 反射 可以穿插在方法调用前、return、异常、甚至是对象的实例化,利用代理来实现

DTO:数据传输对象

AutoMapper映射,安装依赖包

  • AutoMapper
  • AutoMapper.Extensions.Microsoft.DependencyInjection

AutoMapper使用:属性需要完全一致

WebApi


get put post delete
数据获取 数据的插入 数据更新 数据删除
##浏览器向服务器请求的数据有:
1. QueryString字符串
2. Form
3. Cookie
4. Session
5. Header

EF core

用swagger时,必须有访问方式
EntityFrameworkCore安装包:
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools
Pomelo.EntityFrameworkCore.MySql

DbFirst

设为启动项目->程序包管理控制台->默认项目->输入(MySql):  Scaffold-DbContext -Force -OutputDir Entity -ContextDir Context -Context CimdbContext  "server=127.0.0.1;user id=root;database=cimdb;password=itc123!@#" -Provider "Pomelo.EntityFrameworkCore.MySql"

命令参数 作用
OutputDir 实体文件所存放的文件目录
ContextDir DbContext文件存放的目录
Context DbContext文件名
Schemas 需要生成实体数据的数据表所在模式
Tables 需要生成实体数据的数据表的集合
UseDatabaseNames 直接使用数据库中的表名和列名(某些版本不支持)
Force 强制执行,重写已经存在的实体文件

Code First

/ /
[AllowAnonymous] 跳过授权校验

微服务架构

SOA:总线,中介者模式
微服务:门面模式

进程间通信

/ /
1.共享存储 Redis,DB,Queue,硬盘文件
2.服务通信 WebService,WCF,WebApi,ashx/aspx
3.RPC .Net平台独有

鉴权授权

  • 第一步:在app.UseRouting()之后、app.UseEndpoints之前增加鉴权授权;
鉴权 检测用户是否登录
授权 检测有没有权限,是否能访问后续的页面功能
  • 第二步:在ConfigureServices中增加

  • 第三步:指定哪些Action需要做鉴权授权[Authorize]
    鉴权授权 identity server4与.net core融合比较好
    User (登录请求)-> Authorization
    <- 返回token
    Gateway识别并解析token
    即由identity server4发放token带到httpcontext中,由Gatewa识别解析token
    角色授权
    不同的用户不同角色,做不同拦截。
    Token校验
    User <—> app.UseAuthorization(返回Token)
    User <—> Api(带着Token访问)
    User <—> Third Party(带着Token访问,第三方Api)

    Token的有效性,通过加密解密完成

identity server 4

  • openid 去中心化的框架
  • OAuth
  • ODIC
  • Ids4

集群

服务实例必须集群/负载均衡:多台服务器做相同的事,共同承载压力(高可用,可伸缩)(比如应对服务器挂了)
Nginx:单纯是负载均衡,不够用
1.增加/减少服务实例,动态增减,要重启Nginx,服务注册与发现不智能
2.健康检查(微服务实例代码小于2000行),如遇到网络断网,即时发现问题,下线

分布式
一个进程做的事,分成多个进程协作完成
集群与分布式区别
集群:多台服务器做相同的事,属于均摊关系
分布式:一个进程做的事,分成多个进程协作完成。一个事情分成多个步骤,协作完成(狭义理解:串行)
Consul
服务启动时注册-Consul-调用者调用
|Health check|
网关Gateway

作用:更换ip、端口、更新程序时
1.提供统一服务入口
2.聚合后台服务,节省流量,提升性能
3.提供安全,过滤,流控等API管理功能,实现对外部请求的协议转换、参数校验、鉴权、切量、熔断、限流、监控、风控等通用服务

服务治理:
缓存:共享缓存
熔断:服务挂了,请求还不断,即时通知。单位时间内异常多少次,网关返回失败
限流:单位时间内流量只允许多少次,多了排队
降级:特殊情况,可以降低服务等级,甚至关闭

分布式事务
CAP,分布式锁
任何分布式系统只可同时满足C一致性、A可用性、P分区容错性中的两点,没法三者兼顾。满足可用性、最终一致性。实现最终一致性三种模式:
1.可靠事件模式 2.业务补偿模式 3.TCC模式

启动微服务命令
dotnet BBSWeb.dll --urls=“http://*:5002” --ip=“127.0.0.1”–port=5002

集群和服务注册发现
string url = “http://localhost:5000/aip/user/all”
string content = InvokeApi(url);

    public static string InvokeApi(string url){using (HttpClient httpClient = new HttpClient()){HttpRequestMessage message = new HttpRequestMessage();message.Method = HttpMethod.Get;message.RequestUri = new Uri(url);var result = httpClient.SendAsync(message).Result;string content = result.Content.ReadAsStringAsync().Result;return content;}}

组件统计

  • docker:容器化
  • Jenkins:CI/DI;主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。(提交代码后,构建测试、发布)
  • Nacos/Consul:服务发现
  • Ocelot:网关处理
  • Nginx:负载均衡
  • Identity Server 4:认证中心
  • K8S:容器编排;把容器当资源,说明书,管理docker进程、资源、docker的关系。docker是宿舍,K8S是宿舍阿姨
  • Polly:瞬态故障处理;一种.NET弹性和瞬态故障处理库,允许以非常顺畅和线程安全的方式来执行重试、短路、超时、故障恢复等策略
  • Exceptionless:开源的日志收集和分析框架,能为应用程序提供实时错误、特性和日志报告
  • Apollo:统一配置中心;配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。(集中的配置中心,不同集群不同环境可以配置推送)
    Skywalking Skyapm:分布式追踪和APM的server端,它将包含Collector,Storage,独立的WebUI,并使用OpenTracing规范来设计追踪数据(分配一个Guid,统计在各个环节流程的信息)

【Net Core系列】(前言).net core学习笔记相关推荐

  1. 【C#8.0 and .NET Core 3.0 高级编程学习笔记】

    @C#8.0 and .NET Core 3.0 高级编程学习笔记 前言 为了能精细地完成对C#语言的学习,我决定选择一本书,精读它,理解它,记录它.我想选择什么书并不是最重要的,最重要的是持之以恒的 ...

  2. Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)

    开发板:Zynq7030数据采集板 PC平台:Ubuntu-18.04 + MobaXterm 开发环境:Xilinx Vivado + SDK -18.3 交叉编译工具:arm-linux-gnue ...

  3. 一个.NET Core开发者的Linux入门学习笔记

    用.NET Core开发也有一段时间了,但是由于工作原因一直都是在Windows系统上进行的开发,一直想学习Linux然后把.NET Core开发的程序跑在Linux上,然后把心得体会记录一下发布再博 ...

  4. (java)玩转算法系列-数据结构精讲[学习笔记](一)不要小瞧数组

    前言: 课程:玩转算法系列–数据结构精讲 更适合0算法基础入门到进阶(java版) 此处是个人学习笔记,用作回顾用途 不要小瞧数组 1.使用java中的数组 Main.java: public cla ...

  5. 吴恩达老师DeepLearning系列课程最详细学习笔记之4—为什么深度学习会兴起?

    教程是本人学习吴恩达老师DeepLearing系列课程中整理的最为详细的学习笔记.学习视频主要来自B站[双语字幕]吴恩达深度学习deeplearning.ai_哔哩哔哩_bilibili?,以及Dee ...

  6. 吴恩达老师DeepLearning系列课程最详细学习笔记之23—Jupyter Ipython笔记本的快速指南

    教程是本人学习吴恩达老师DeepLearing系列课程中整理的最为详细的学习笔记.学习视频主要来自B站[双语字幕]吴恩达深度学习deeplearning.ai_哔哩哔哩_bilibili?,以及Dee ...

  7. 千峰java 笔记整理_JAVA学习笔记系列:菜鸟Vue学习笔记(四)

    菜鸟Vue学习笔记(四) 上周学习了使用Vue来操作表单元素进行数据双向绑定,今天我们来学习下Vue中的组件,Vue中的组件作用就是去封装一些常用的页面标签,将其当做一个整体,以便在其他位置直接使用一 ...

  8. IOS Core Animation Advanced Techniques的学习笔记(五)

    第六章:Specialized Layers   类别 用途 CAEmitterLayer 用于实现基于Core Animation粒子发射系统.发射器层对象控制粒子的生成和起源 CAGradient ...

  9. .NET Core开发实战(第29课:定义仓储:使用EF Core实现仓储层)--学习笔记

    29 | 定义仓储:使用EF Core实现仓储层 首先定义仓储层的接口,以及仓储层实现的基类,抽象类 仓储层的接口 namespace GeekTime.Infrastructure.Core {// ...

  10. .NET Core开发实战(第4课:Startup:掌握ASP.NET Core的启动过程)--学习笔记

    04 | Startup:掌握ASP.NET Core的启动过程 新建一个 ASP.NET Core Web 应用程序 选择 API public class Program {public stat ...

最新文章

  1. 使用球面目标自动标定雷达-相机外参
  2. div+css背景渐变色代码示例
  3. SharePoint 2013 入门教程之创建页面布局及页面
  4. 转载:k2pdfopt详细教程-让kindle看遍所有pdf
  5. Spring Cloud Gateway的全局异常处理
  6. 13.2.7 中间件
  7. jQuery --- 简单操作合集
  8. 运维工程师如果将web服务http专变为https
  9. 身份的象征?苹果信用卡实体首度曝光:简约大方 保护隐私
  10. html5二维动画教程,Flash二维动画制作案例教程
  11. 【UCOSIII操作系统】硬件初始化篇(1)硬件初始化以及开始运行系统
  12. c语言中puts的作用是,C语言的字符串输出puts()函数
  13. 高中新课程作业本 地理 必修1 参考答案下
  14. 在线视频学习网站的设计与实现
  15. Java基于JSP个人博客网站设计与实现
  16. FFMPEG4.1源码分析之 内存管理APIs av_freep() av_free()
  17. 浅谈JAVA的往日辉煌与未来趋势
  18. laravel用户详情及封禁和启用用户api
  19. nacos + seata
  20. java对gzip格式进行压缩与解压缩

热门文章

  1. 软件功能性测试方法和流程
  2. 数据分析3_淘宝用户行为分析_阿里云天池
  3. Python入门者必须吃透嚼烂的69个内置函数一(1含案例详解)
  4. 经典算法大全之费式数列
  5. CSS 选择所有子元素添加样式
  6. 论文格式修改之英文摘要
  7. Guass列主元、平方根法、追赶法求解方程组的C++实现
  8. 02、DHT11温湿度传感器
  9. 微型计算机咋样插网卡,PCI网卡怎么装及插在哪 PCI网卡安装使用图文教程
  10. 万字拆解孩子王:充满矛盾的母婴零售之王