.NET Core 开发实战
肖伟宇
校宝在线架构师、SkyWalking .NET 探针贡献者、NetCorePal 组件库创建者
20086 人已学习
新⼈⾸单¥59
课程目录
已完结/共 61 讲
第一章:必备知识 (25讲)
时长 06:28
时长 02:13
.NET Core 开发实战
登录|注册
留言
12
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 16 | 选项数据热更新:让服务感知配置的变化
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | .NET Core的现状、未来以及环境搭建
04 | Startup:掌握ASP.NET Core的启动过程
05 | 依赖注入:良好架构的起点
06 | 作用域与对象释放行为:你知道IDisposable对象释放的时机和坑吗?
07 | 用Autofac增强容器能力:引入面向切面编程(AOP)的能力
08 | 配置框架:让服务无缝适应各种环境
09 | 命令行配置提供程序:最简单快捷的配置注入方法
10 | 环境变量配置提供程序:容器环境下配置注入的最佳途径
11 | 文件配置提供程序:自由选择配置的格式
12 | 配置变更监听:配置热更新能力的核心
13 | 配置绑定:使用强类型对象承载配置数据
14 | 自定义配置数据源:低成本实现定制化配置方案
15 | 选项框架:服务组件集成配置的最佳实践
16 | 选项数据热更新:让服务感知配置的变化
17 | 为选项数据添加验证:避免错误配置的应用接收用户流量
18 | 日志框架:聊聊记日志的最佳姿势
19 | 日志作用域:解决不同请求之间的日志干扰
20 | 结构化日志组件Serilog:记录对查询分析友好的日志
21 | 中间件:掌控请求处理过程的关键
22 | 异常处理中间件:区分真异常与逻辑异常
23 | 静态文件中间件:前后端分离开发合并部署骚操作
24 | 文件提供程序:让你可以将文件放在任何地方
25 | 路由与终结点:如何规划好你的Web API
26 | 工程结构概览:定义应用分层及依赖关系
27 | 定义Entity:区分领域模型的内在逻辑和外在行为
28 | 工作单元模式(UnitOfWork):管理好你的事务
29 | 定义仓储:使用EF Core实现仓储层
30 | 领域事件:提升业务内聚,实现模块解耦
31 | APIController:定义API的最佳实践
32 | 集成事件:解决跨微服务的最终一致性
33 | 集成事件:使用RabbitMQ来实现EventBus
34 | MediatR:轻松实现命令查询职责分离模式(CQRS)
35 | MediatR:让领域事件处理更加优雅
36 | HttpClientFactory:管理向外请求的最佳实践
37 | gRPC:内部服务间通讯利器
38 | gRPC:用代码生成工具提高生产效率
39 | Polly:用失败重试机制提升服务可用性
40 | Polly:熔断慢请求避免雪崩效应
41 | 网关与BFF:区分场景与职责
42 | 网关与BFF:使用JWT来实现身份认证与授权
43 | 安全:反跨站请求伪造
44 | 安全:防开放重定向攻击
45 | 安全:防跨站脚本
46 | 安全:跨域请求
47 | 缓存:为不同的场景设计合适的缓存策略
48 | 部署:演示一个部署流程
49 | ConfigMap:实现基本配置方案
50 | 配置:使用分布式配置中心方案版本化管理配置
51 | 健康检查:与Liveness、Readiness、Startup探测集成实现高可用
52 | 健康检查:搭建全量健康检查探针和看板
53 | ForwardedHeaders:确保服务在负载均衡下正常工作
54 | 安全:介绍强制HTTPS的两种方式
55 | 日志:与EFK日志三件套集成
56 | 日志:Exceptionless日志系统
57 | 追踪:集成SkyWalking .NET实现追踪
58 | 监控与告警:Prometheus与AlertManager
59 | 监控与告警:用Granfana实现监控看板
60 | prometheus-net:自定义监控指标利器
61 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(12)

  • 最新
  • 精选
木风
边看边冒出一堆问题,直接在服务里读json或ini文件不行吗?为什么需要用Option呢? 为什么单例服务才使用IOptionsMonitor? 在那有相关文档说明?...我想肖老师,如果除了讲解代码外,要是能介绍多一些这功能使用场景,和这么写代码有什么好处,就更好了,谢谢。

作者回复: 直接在服务中读取json,就意味着服务依赖了整个配置文件,而服务只应该关注它依赖的部分,因此它应该依赖的是自己的Options。 使用Options另外一个好处是强类型,可以除了可以承载基础类型的数据外,还可以承载Action动作的,意味着你可以为服务配置一些动态逻辑进去。

2020-02-21
3
5
landon
老师,这里如果我使用FreeSql/SqlSugar这类的ORM,我要怎样才能配置成感知配置变化呢?我试了,好像有问题,但是如果是其他配置是没问题的,数据库这一块还是搞不清

作者回复: 使用IOptionsMonitor<T>来读取配置,将数据库链接的构造注册为Scope且使用。或者注册工厂方法,类似这样: services.AddScoped<IDbConnection>(provider => new MySqlConnection(Configuration["MySql"])); 这样当配置变化后,后续的请求会读到新配置

2020-03-03
2
2
landon
肖老师,有个问题想问问,就是如果我再webapi中想将数据库的配置设置成感知变化,那我是讲OnChanges写在public void ConfigureServices(IServiceCollection services) 方法里吗?比如我前面已经将Db的配置设置了,后面直接覆盖可以吗?这个代码是否可以呢? services.Configure<OptionConfig>(Configuration.GetSection("DbConfig")); IChangeToken token = Configuration.GetReloadToken(); ChangeToken.OnChange(() => Configuration.GetReloadToken(), () => { services.Configure<OptionConfig>(Configuration.GetSection("DbConfig")); });

作者回复: 将connectionString 获取逻辑写在Builder的逻辑中即可: public static IServiceCollection AddMySqlDomainContext(this IServiceCollection services, IConfiguration configuration) { return services.AddDomainContext(builder => { var connectionString = configuration.GetValue<string>("Mysql"); builder.UseMySql(connectionString); }); }

2020-03-03
3
1
向洪林
这里有个疑惑。debug模式不是调用的bin/debug文件下的app setting. json文件的配置吗?为啥在解决方案里直接改配置能够生效?

作者回复: ASP.NET Core类型的项目,调试模式下被优化了

2020-05-13
2
药王
肖老师,我想问一下怎么样实现:在代码中修改Options的值,然后用修改后的值更新配置文件。配置源是xml或json。

作者回复: 组件并未提供反向变更数据源的能力,从设计上也不建议这么做。 更好的做法是,专门为配置数据源设计修改它的类(或者组件)

2020-04-06
人间有妖气
IOptionMonitor 发现注册Singleton,Scoped,Transient都可以获取改动的配置,为什么还要区分IOptionSnapshot和IOptionMonitor呢? 还有 IOption 在Singleton,Scoped,Transient下都不会获取到改变的配置,那为什还用他和配置文件绑定呢? 什么情况会用到IOption?

作者回复: IOption<>是单例的,它不跟踪配置更新,读不到更新后的值。 IOptionMonitor <>是单例的,它跟踪配置更新,总是读到最新的值。 IOptionSnapshot<>是范围的,它在范围的生命周期中,不会更新,但它会读到范围生命周期创建前的变更。

2020-03-25
2
WEDO
请问一下在启动mvc web程序后,同时可以显示命令行窗口,Console.WriteLine输出的内容,可以在窗口中显示出来。

作者回复: 直接用ILogger记录日志即可,在配置文件配置Console的输出级别

2020-02-29
4
Geek_Zhengyu
感觉这一节真有用!
2021-07-25
吴华杰
肖老师,请问下 这些选项配置相关框架,在.net framework中支持吗?
2021-06-25
背包客
老师你好: _orderOption.OnChange(orderOption=> { Console.WriteLine(orderOption.MaxCount); }); 我想把这里监听的值,怎么赋给其他对象
2020-11-23
收起评论