网关和服务发现
API 网关是一个服务器,它是客户端和后端服务之间的中介。它接收来自客户端的请求,然后将这些请求转发到后端服务。基于 BFF(后端用于前端)模式,当客户端请求数据时,API 网关可以调用多个服务来获取数据,然后将数据聚合到一个响应中返回给客户端,以减少客户端与后端服务之间的通信次数,从而提高性能。服务发现是一种用于发现和定位服务的机制,它可以帮助客户端找到服务的位置和地址。服务发现可以用于构建和设计微服务架构中的 API 网关,以便客户端可以通过 API 网关访问后端服务。
网关和服务发现
构建和设计 API 网关
API 网关是一个服务器,它是客户端和后端服务之间的中介。它接收来自客户端的请求,然后将这些请求转发到后端服务。API 网关还可以执行其他任务,例如身份验证、监视、负载平衡、缓存、请求分析和日志记录。
BFF 模式聚合多个服务
API 网关可以聚合多个服务,基于 BFF(后端用于前端)模式,当客户端请求数据时,API 网关可以调用多个服务来获取数据,然后将数据聚合到一个响应中返回给客户端,以减少客户端与后端服务之间的通信次数,从而提高性能。
常见的 API 网关
Nginx、Envoy、Ocelot、Yarp、Zuul、Kong、Traefik、Tyk、Ambassador、Gloo、AWS API Gateway、Azure API Management、Google Cloud Endpoints、Apigee、MuleSoft Anypoint API Gateway、WSO2 API Manager、TIBCO Mashery、3scale API Management、Akana、CA API Gateway、Dell Boomi、DreamFactory、IBM API Connect、Mashape、Mashery、MuleSoft Anypoint Platform、OpenLegacy、Oracle API Platform Cloud Service、Repre。
基于.NET 的开源 API 网关
Ocelot 和 Yarp 是一个基于.NET 的开源 API 网关,它可以用于构建和设计微服务架构中的 API 网关。Yarp 提供了很多功能,例如路由、负载平衡、认证、授权、限流、熔断、重试、缓存、请求转发、请求重写、请求日志、响应缓存、响应压缩、响应缓存、响应重写、响应日志、监视、跟踪、跨域、安全、性能、可扩展性、可配置性、可管理性、可监视性、可测试性、可部署性、可维护性、可扩展性、可升级。
使用 Yarp 构建和设计 API 网关
dotnet add package Yarp.ReverseProxyshell使用配置文件配置 Yarp
{
"ReverseProxy": {
"Routes": {
"testserviceRoute": {
"ClusterId": "testServiceCluster",
"Match": {
"Path": "testservice/{**remainder}"
},
"Transforms": [
{ "PathPattern": "{**remainder}" }
]
}
},
"Clusters": {
"testServiceCluster": {
"Destinations": {
"testServiceCluster/destination1": {
"Address": "http://identityservice"
}
}
}
}
}
}json.NET 中的服务发现
服务发现是一种用于发现和定位服务的机制,它可以帮助客户端找到服务的位置和地址。服务发现可以用于构建和设计微服务架构中的 API 网关,以便客户端可以通过 API 网关访问后端服务。
使用服务发现
https://learn.microsoft.com/zh-cn/dotnet/core/extensions/service-discovery
dotnet add package Microsoft.Extensions.ServiceDiscovery --prereleaseshellbuilder.Services.AddServiceDiscovery();
builder.Services.ConfigureHttpClientDefaults(static http =>
{
// Turn on service discovery by default
http.UseServiceDiscovery();
});csharp{
"Services": {
"catalog": {
"https": [
"localhost:8080",
"10.46.24.90:80"
]
}
}
}json在反向代理中使用服务发现
dotnet add package Microsoft.Extensions.ServiceDiscovery.Yarpshell接着看
构建可靠的事务性发件箱模式
事务性发件箱模式确保将事件保存在数据存储中,然后再最终推送到消息代理。 如果业务对象和相应的事件保存在同一数据库事务中,则保证不会丢失任何数据。 所有内容都将被提交,或在出错时所有内容回滚。 为了最终发布事件,其他服务或工作进程会在发件箱表中查询未处理项,发布这些事件,并将其标记为已处理。 此模式可确保创建或修改业务对象后不会丢失事件。
自动迁移和数据库初始化
EF Core中数据库迁移与初始化的核心概念与实用技巧。内容包括生成与应用迁移脚本、EnsureCreatedAsync与MigrateAsync的使用及冲突解决、通过内部服务实现优雅的自动迁移、EF Core 9.0推荐的异步种子数据初始化方法,以及利用IHostedService或BackgroundService实现耗时操作的异步数据库初始化。通过本课程,开发者将掌握高效管理数据库生命周期的最佳实践,提升项目开发效率与质量。
重构代码并抽取基础构建库
本次重构优化了事件总线架构,提升了系统的扩展性和灵活性。新增支持包和多个项目,增强了事件处理能力。通过实现基于 Dapr 和 RabbitMQ 的事件总线,改进了消息传递效率。加入了分布式锁功能,确保并发场景下的数据一致性。
在 Aspire 中集成 PostgreSQL 数据库
在 Host 项目中添加 PostgreSQL 数据库,在最终的应用中引用 PostgreSQL 数据库,添加 PostgreSQL pgAdmin 资源,添加 PostgreSQL pgWeb 资源。