.NET Core 开发实战
肖伟宇
校宝在线架构师、SkyWalking .NET 探针贡献者、NetCorePal 组件库创建者
20086 人已学习
新⼈⾸单¥59
课程目录
已完结/共 61 讲
第一章:必备知识 (25讲)
时长 06:28
时长 02:13
.NET Core 开发实战
登录|注册
留言
11
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 32 | 集成事件:解决跨微服务的最终一致性
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 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(11)

  • 最新
  • 精选
偏偏
老师,您好,很高兴能有机会与你交谈,订阅你的课,有几个问题,希望老师可以解惑。 1. DOTNET.CAP原理是什么,怎么实现分布式事务一致性的? 2. 为什么要把Event Bus 与 EF绑在一起 抽离seedwork?这样写我每个服务都需要配置Event,而有的服务是不需要的。 3. 如何实现跨服务分布式事务,多个服务配置应该如何写?是否能给个示例? 4. 关于日志,使用serilog的优点是什么,与nlog或log4net有什么优势。 5. 领域事件和聚合那块没有听明白,是否可以详细解释一下。

作者回复: 1. CAP是实现了outbox的机制,也就是本地事件表的机制,可以参考:https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/multi-container-microservice-net-applications/subscribe-events#designing-atomicity-and-resiliency-when-publishing-to-the-event-bus 2.这里是提供了最复杂情况的示例,在不需event bus的服务,可以使用seedwork的模式来复用代码,也可以为其设计一个独立的共享包 3.跨服务的情况,即一个服务负责发布事件,一个服务负责订阅,示例中发布和订阅写在了同一个微服务周中,实际场景是在不同服务的。 4.serilog支持更多的日志输出,例如fluentd、elasticsearch,当然nlog和log4net也不错,选择哪一个与你的熟悉程度也是有关系的,满足诉求即可。 5.后面我尝试补充一下相关内容。 5.

2020-02-22
5
5
SuperSnow
老师好 1、集成事件一般是由领域事件驱动触发,例子中OrderCreatedDomainEventHandler在application层中,OrderCreatedDomainEvent在domain项目中,这两个类是否可以都放在domain层中? 2、老师如果方便的话,可否提供一下两个微服务的一些具体实现方案,相对完整一点的,或者有什么案例可供参考的,非常感谢。

作者回复: 领域事件是由领域模型驱动触发的,应该与领域模型放在一起。 对于领域事件的处理,你可以理解成一个由事件发起处理命令,这个命令与用户从API发起命令实质是一样的,因此事件处理handler应该在应用层,它需要通过发起用各种Command来实现事件的处理。

2020-03-07
1
SuperSnow
老师好, 1、请问集成事件是什么概念?相当于应用服务吗? 2、我看有command,commandHandler,这个在应用层和领域层怎么进行归类,可以结合一下项目进行划分一下吗?感觉在webApi的项目里,划分的有些乱。

作者回复: 集成事件是相对于领域事件而言,领域事件是指领域模型触发的事件,集成事件是将这些事件在不同的微服务之间传递的手段,集成事件的触发,一般也是由领域事件驱动的。

2020-03-07
1
stg609
消息队列如果无法保证事件的发送顺序,集成事件如何处理?

作者回复: 建议将事件定义为幂等的,避免依赖顺序。

2020-02-23
1
张文君
请问老师,我最近在学DDD,感觉您这里提到的集成事件就是领域服务的概念,对吗?

作者回复: 集成事件用来跨微服务传递领域事件的

2020-06-04
强子
请教下:发布和订阅都用到了OrderCreatedIntegrationEvent这个类,那跨服务的时候是不是要把这个类抽离出来供两个服务共享呢?

作者回复: 这种情况还是拷贝一下好,因为两端的更新有可能无法做到同时更新。 新版本发布时,考虑兼容即可

2020-05-10
Geek_09f05a
老师,这个不是垮微服务的吗?您在一个微服务里演示了,如果是两个服务也是一样的对吗

作者回复: 是的,集成事件的作用就是跨微服务传递事件

2020-03-26
SuperSnow
那集成事件可以理解为就是一个对于不同服务之间传递数据的类,比如product服务,order服务,现在创建订单的发布命令在product服务中触发,然后需要向order服务传递如productId,accessToken之类的信息,这个时候我创建一个类用于包含这些指标,这个类就是集成事件,是吧? 另外,由于该事件是要应用在这两个微服务之上的,所以像这种集成事件是不是应该封装成一个公共类库比较好?还是采用其他方式? 多谢老师!

作者回复: 对的,集成事件是为了在微服务之间传递事件。 发布者将事件定义到一个公共类库是可行的。 不过一般,每个服务关注的事件都是不一样的,引入这个类库并没有带来非常大的收益,这个取舍可以看团队的习惯,以及事件共享库的更新频率

2020-03-07
stg609
集成事件可否直接由应用层中的逻辑来决定是否要发送?如果不能,那原因是什么?谢谢 我看例子中是先触发领域事件,然后由应用层中的领域事件处理器发送集成事件。

作者回复: 事件表示领域模型发生了什么,是客观存在的,是否发送是由是否有人关心它决定的,应用层可以决定是否接收,而不是是否发送。 另外,当一个事件没有任何业务关心,则可以不定义它。

2020-02-28
jacky
Repositories能否放在Domain层里面,这样后续演化方便一点?

作者回复: 领域层不应该关心其是如何存储的,不建议把仓储与领域模型放在一层

2020-02-21
3
收起评论