1.Abp.AbpBootstrapper
解析:这是一个主类,它负责开始全部的ABP系统。

2.Abp.Dependency.IocManager
解析:这个类用于直接执行依赖注入任务。

3.void Abp.Dependency.IIocRegistrar.RegisterAssemblyByConvention(Assembly assembly)
解析:注册给定的程序集类型。

4.定义一对多关系
解析:一首诗对应一个诗人,而一个诗人对应多首诗:

modelBuilder.Entity<Poem>().HasOne<Poet>(s => s.Author).WithMany(s => s.Poems).HasForeignKey(s => s.PoetID);

5.定义多对多关系
解析:一首诗对应多个种类,而一个种类对应多首诗:

modelBuilder.Entity<CategoryPoem>().HasKey(t => new { t.CategoryId, t.PoemId });
modelBuilder.Entity<CategoryPoem>().HasOne(pt => pt.Poem).WithMany(p => p.PoemCategories).HasForeignKey(pt => pt.PoemId);
modelBuilder.Entity<CategoryPoem>().HasOne(pt => pt.Category).WithMany(t => t.CategoryPoems).HasForeignKey(pt => pt.CategoryId);

6.Entity Data Model
解析:实体数据模型。

7.Change Tracking
解析:EF会跟踪这个实体状态的更改。

8.导航属性
解析:
导航属性表示该属性关联到另一个实体,有2种类型导航属性:
[1]引用导航属性表示:一个实体的属性的类型是另一个实体类型。
[2]集合导航属性表示:实体属性的类型是集合类型。

9.Volo.Abp.FluentValidation包
解析:将FluentValidation库集成到了验证系统,通过实现IObjectValidationContributor。

10.Minify
解析:可以按需对JavaScript以及CSS文件进行合并、压缩以及缓存,以加快页面的载入速度。

11.ABP-MicroService微服务启动顺序[2]
解析:
[1]BaseService:基本微服务
[2]AuthServer:授权微服务
[3]Business:业务微服务
[4]FileStorage:文件存储微服务
[5]WebAppGateway:外部网关微服务
微服务启动后,相应的Swagger链接为:
[1]BaseService Service API:http://localhost:65389/swagger/index.html
[2]FileStorage Service API:http://localhost:59958/swagger/index.html
[3]Business Service API:http://localhost:51186/swagger/index.html
[4]WebAppGateway:http://localhost:52162/
[5]Vue前端页面:http://localhost:9527/#/login?redirect=%2Fdashboard
说明:由于微服务端口冲突,因此端口有所修改。系统默认的账号密码为admin、1q2w3E*。

12.ABP-MicroService登录
解析:在用户登录过程中调用了如下2个接口:
[1]获取token:http://localhost:53362/connect/token
[2]获取权限application-configuration:http://localhost:52162/api/abp/application-configuration
说明:username=admin;password=1q2w3E%2A;client_id=basic-web;client_secret=1q2w3e%2A;grant_type=password

13.Ocelot开源API网关原理
解析:当它拿到请求之后会用一个requestbuilder来构造一个HttpRequestMessage发到下游的真实服务器,等下游的服务返回response之后再由一个middleware将它返回的HttpResponseMessage映射到HttpResponse上。

14.void System.Threading.Tasks.Task.Wait()
解析:等来Task来完成。

15.Ocelot.json配置文件
解析:
[1]Downstream:下游服务配置
[2]UpStream:上游服务配置
[3]Aggregates:服务聚合配置
[4]ServiceName、LoadBalancer、UseServiceDiscovery:配置服务发现
[5]AuthenticationOptions:配置服务认证
[6]RouteClaimsRequirement:配置Claims鉴权
[7]RateLimitOptions:限流配置
[8]FileCacheOptions:缓存配置
[9]QosOptions:服务质量与熔断
[10]DownstreamHeaderTransform:头信息转发

16.Ocelot万能模板
解析:

{"DownstreamPathTemplate": "/{url}","DownstreamScheme": "https","DownstreamHostAndPorts": [{"Host": "localhost","Port": 80,}],"UpstreamPathTemplate": "/{url}","UpstreamHttpMethod": [ "Get" ]
}

17.LoadBalancer
解析:它将决定负载均衡的算法:
[1]LeastConnection:将请求发往最空闲的那个服务器
[2]RoundRobin:轮流发送
[3]NoLoadBalance:总是发往第一个请求或者是服务发现

18.Ocelot服务限流
解析:

"RateLimitOptions": {"ClientWhitelist": [],"EnableRateLimiting": true,"Period": "1s","PeriodTimespan": 1,"Limit": 1
}

[1]ClientWihteList:白名单
[2]EnableRateLimiting:是否启用限流
[3]Period统计时间段:1s、5m、1h、1d
[4]PeroidTimeSpan:多少秒之后客户端可以重试
[5]Limit:在统计时间段内允许的最大请求数量
其它配置如下所示:

"RateLimitOptions": {"DisableRateLimitHeaders": false,"QuotaExceededMessage": "Customize Tips!","HttpStatusCode": 999,"ClientIdHeader" : "Test"
}

[1]Http头:X-Rate-Limit和Retry-After是否禁用
[2]QuotaExceedMessage:当请求过载被截断时返回的消息
[3]HttpStatusCode:当请求过载被截断时返回的http status
[4]ClientIdHeader:用来识别客户端的请求头,默认是ClientId

19.服务熔断
解析:熔断的意思是停止将请求转发到下游服务。当下游服务已经出现故障的时候再请求也是功而返,并且增加下游服务器和API网关的负担,这个功能是用的Pollly来实现的。

"QoSOptions": {"ExceptionsAllowedBeforeBreaking":3,"DurationOfBreak":5,"TimeoutValue":5000
}

[1]ExceptionsAllowedBeforeBreaking:允许多少个异常请求
[2]DurationOfBreak:熔断的时间,单位为秒
[3]TimeoutValue:如果下游请求的处理时间超过多少则自如将请求设置为超时

20.Ocelot服务缓存
解析:Ocelot可以对下游请求结果进行缓存,它主要是依赖于CacheManager来实现。

"FileCacheOptions": { "TtlSeconds": 15, "Region": "somename" }

Region是对缓存进行的一个分区,可以调用Ocelot的administration API来移除某个区下面的缓存。

21.Ocelot服务认证
解析:如果需要对下游API进行认证以及鉴权服务的,则首先Ocelot网关这里需要添加认证服务。

public void ConfigureServices(IServiceCollection services)
{var authenticationProviderKey = "TestKey";services.AddAuthentication().AddJwtBearer(authenticationProviderKey, x =>{});
}

然后在ReRoutes的路由模板中的AuthenticationOptions进行配置,只需要AuthenticationProviderKey一致即可。

"ReRoutes": [{"DownstreamHostAndPorts": [{"Host": "localhost","Port": 51876,}],"DownstreamPathTemplate": "/","UpstreamPathTemplate": "/","UpstreamHttpMethod": ["Post"],"ReRouteIsCaseSensitive": false,"DownstreamScheme": "http","AuthenticationOptions": {"AuthenticationProviderKey": "TestKey","AllowedScopes": []}}]

22.JWT Tokens
解析:

public void ConfigureServices(IServiceCollection services)
{var authenticationProviderKey = "TestKey";services.AddAuthentication().AddJwtBearer(authenticationProviderKey, x =>{x.Authority = "test";x.Audience = "test";});services.AddOcelot();
}

23.Identity Server Bearer Tokens
解析:

public void ConfigureServices(IServiceCollection services)
{var authenticationProviderKey = "TestKey";var options = o =>{o.Authority = "https://whereyouridentityserverlives.com";o.ApiName = "api";o.SupportedTokens = SupportedTokens.Both;o.ApiSecret = "secret";};services.AddAuthentication().AddIdentityServerAuthentication(authenticationProviderKey, options);services.AddOcelot();
}

24.Ocelot服务鉴权
解析:通过认证中的AllowedScopes拿到claims之后,如果要进行权限的鉴别需要添加以下配置:

"RouteClaimsRequirement": {"UserType": "registered"
}

当前请求上下文的token中所带的claims如果没有name="UserType"并且value="registered"的话将无法访问下游服务。

25.Ocelot请求头转化
解析:请求头转发分两种:
[1]转化之后传给下游和从下游接收转化之后传给客户端
[2]在Ocelot的配置里面叫做PreDownstreamRequest和PostDownstreamRequest

参考文献:
[1]微服务实践汇总:http://www.csharpkit.com/2017-12-14_81997.html
[2]ABP-MicroService:https://github.com/WilliamXu96/ABP-MicroService
[3].NET Core开源API网关–Ocelot中文文档:https://www.cnblogs.com/jesse2013/p/net-core-apigateway-ocelot-docs.html

ABP VNext学习日记14相关推荐

  1. ABP VNext学习日记17

    1.public static Assembly GetExecutingAssembly() 解析:得到包含的代码正在执行的程序集. 2.public interface IHostedServic ...

  2. ABP VNext学习日记20

    1.AbpApiControllerActivator 解析:实现了IHttpControllerActivator接口,根据controller的类型生成指定的controller. 2.AbpDy ...

  3. ABP VNext学习日记15

    1.Polly服务容错模式 解析: [1]错误处理fault handling:重试.熔断.回退 [2]弹性应变resilience:超时.舱壁.缓存 2.Polly错误处理步骤 解析: [1]定义条 ...

  4. ABP VNext学习日记3

    1.ABP中的DTO 解析:在ABP的设计中,有两种不同类型的DTO,分别是用于新增.修改.删除的Input DTO,和用于查询的Output DTO. 2.Unit of Work 解析:工作单元与 ...

  5. ABP VNext学习日记21

    1.public class PagedResultDto<T> : ListResultDto<T>, IPagedResult<T> 解析: public lo ...

  6. ABP VNext学习日记30

    1.IDS4中的/connect/token接口 解析:固定写法,不是开发自定义的,只需要直接去使用就行了,注意调用方式时的输入参数. 2.RequestPasswordTokenAsync 解析: ...

  7. ABP VNext学习日记18

    1.IAuthorizationService 解析:IAuthorizationService具有两个AuthorizeAsync方法重载:一个接受资源和策略名称,另一个接受资源并提供要评估的要求的 ...

  8. ABP VNext学习日记22

    1.PreConfigureServices和PostConfigureServices 解析:AbpModule类还定义了PreConfigureServices和PostConfigureServ ...

  9. ABP VNext学习日记1

    1.安装和更新ABP CLI 解析: dotnet tool install -g Volo.Abp.Cli dotnet tool update -g Volo.Abp.Cli 2.模块拆分原则 解 ...

最新文章

  1. php dedecms 记录访问者ip,dedecms实现显示访问者ip地址的方法
  2. Robinhood应用宣布添加BCH和LTC交易
  3. perl的Getopt::Long和pod::usage
  4. 【NLP】ALL in BERT:一套操作冲进排行榜首页
  5. 再高深的 Python 面试难题,这门课都给你整得明明白白!
  6. vscode openOCD 配置Jlink 下载和调试STM32 教程
  7. MHA使用非22端口的SSH配置
  8. C++ static 类成员
  9. HTML与JSP页面的区别
  10. JAVA计算机毕业设计宠物医院管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  11. layui 表单去除校验
  12. 计算机无法删除ie,ie删不掉的原因及解决方法【图解】
  13. cad快速选择命令快捷键_CAD人必知的6大CAD操作命令及快捷键
  14. a卡是什么?a卡和n卡的区别
  15. oracle优质图书,Oracle经典图书之-Optimizing Oracle Performance
  16. java实现银行卡卡号 Luhm 校验算法
  17. R 回归 虚拟变量na_R语言 | 生存分析之R包survival的单变量和多变量Cox回归
  18. Scratch3.0----函数(2)
  19. SIP(会话发起协议)
  20. 工业和信息化部关于开展纵深推进APP侵害用户权益专项整治行动的通知(工信部信管函〔2020〕164号)

热门文章

  1. 荣耀30s怎么升级鸿蒙,惊喜!4部荣耀手机可升级至华为鸿蒙系统,网友表示:终于等到了...
  2. 美颜sdk动态贴纸技术、代码分析
  3. CS(反恐精英)奥林匹克运动会
  4. 机器人开发--设计范式
  5. 2021年1月编程语言排行榜(C语言又第一名)
  6. 鼠标垫测试软件,百款鼠标垫测试(项目)
  7. 电脑监控是真的吗?4个实验一探究竟
  8. 计算机科学与技术3d仿真设计,三维仿真
  9. 联想小新潮7000黑苹果教程_联想小新 潮7000-13怎么装win10系统|联想小新 潮7000-13用u盘重装win10系统教程-系统城...
  10. 这4款神级软件 最好用的软件