什么是网关?
微服务的应用可能是部署在不同机房、不同地区、不同域名下的。此时客户端想要请求对应的服务,都需要知道机器的具体IP或域名;当微服务实例众多时,对客户端来说就难以维护。此时就有了网关,客户端相关的请求直接发送到网关,由网关根据请求标识解析判断出具体的微服务网址,再把请求发送到服务实例上。
搭建网关框架
在Wing_Study解决方案的基础上,新建ASP.NET Core空模板。取名ServiceUI。配置和上一篇文章配置一致,并将启动端口设置为6002(不同的是,这篇文章中,因私人原因,将之前的PG数据库换成了SQLSERVER。见谅)。请参考ServiceUI搭建
需要注意的是配置文件中的UseAutoSyncStructure。它可以自动在数据库中创建Wing所需要的表结构,所以一定要注意,其值要为True。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
// 是否启用配置中心,默认启用
"ConfigCenterEnabled": false,
"Consul": {
"Url": "http://localhost:8500"
},
"ConnectionStrings": {
"Wing": "填写你的数据库连接字符串"
},
//自动同步实体结构到数据库
"UseAutoSyncStructure": true,
"Gateway": {
"Policy": {
"Global": {
限流
//"RateLimit": {
// //是否启用
// "IsEnabled": true,
// //最多执行次数
// "NumberOfExecutions": 1,
// //秒数
// "PerSeconds": 10,
// //每次最大执行并发数
// "MaxBurst": 1
//}
}
},
// 请求日志
"Log": {
// 是否启用网关日志记录
"IsEnabled": true,
// 是否启用事件总线(RabbitMQ)存储日志,生产环境推荐启用,可以提升程序的性能。参考官方文档
"UseEventBus": false
}
}
}
为了测试服务网关,我们接着在Service1服务节点创建一个API。控制器取名Test,方法取名Get。正常访问路劲应为http://localhost:5001/api/test 。但通过网关代理,则为http://localhost:6002/service1/api/test
请求服务地址默认是{网关IP或域名}/{服务名}/{服务路由}
启动UI,网关,Service1服务。访问 http://localhost:6002/service1/api/test,可在UI页面上看到请求服务已被日志记录
下一篇讲讲网关的网关策略