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

7 篇文章 1 订阅

#

【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管道
过滤器Httpurl,Controller里的action只是一个前置条件判断,只能过滤请求,并不能对url中的service调用产生影响
拦截器对象的元数据(类、方法名、参数等)反射可以穿插在方法调用前、return、异常、甚至是对象的实例化,利用代理来实现

DTO:数据传输对象

AutoMapper映射,安装依赖包

  • AutoMapper
  • AutoMapper.Extensions.Microsoft.DependencyInjection

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

WebApi


getputpostdelete
数据获取数据的插入数据更新数据删除
##浏览器向服务器请求的数据有:
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实体文件所存放的文件目录
ContextDirDbContext文件存放的目录
ContextDbContext文件名
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,统计在各个环节流程的信息)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值