1.5 启动服务网关
...大约 2 分钟
简介
服务网关是系统对外的唯一入口,它封装了系统内部架构,为每个客户端提供了定制的API,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有非业务功能。
创建一个Web Api项目
提前准备:安装并启动Consul、RabbitMQ(可选)
打开 Visual Studio 2022 并创建Web Api项目(点击查看完整示例代码1.5)
安装依赖包
安装服务注册nuget包Wing.Consul
,服务网关nuget包Wing.Gateway
,选择对应的数据库驱动(参考FreeSql官网),以SqlServer为例,安装FreeSql.Provider.SqlServer
,请求日志支持本地消息队列和分布式消息队列进行异步持久化,基本上不影响网关性能。如果不想记录请求日志,可以不安装该包。如果想启用EventBus
记录请求日志,需要安装RabbitMQ nuget包Wing.RabbitMQ
。
dotnet add package Wing.Consul
dotnet add package Wing.Gateway
dotnet add package Wing.RabbitMQ
dotnet add package FreeSql.Provider.SqlServer
Install-Package Wing.Consul
Install-Package Wing.Gateway
Install-Package Wing.RabbitMQ
Install-Package FreeSql.Provider.SqlServer
Program代码
using Wing;
var builder = WebApplication.CreateBuilder(args);
builder.Host.AddWing(builder => builder.AddConsul());
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddWing()
.AddPersistence(FreeSql.DataType.SqlServer)
.AddGateWay()
.AddEventBus();// 如果不想使用EventBus记录请求日志,可以删除此行代码
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
添加配置
{
// 是否启用配置中心,默认启用
"ConfigCenterEnabled": false,
"Consul": {
"Url": "http://localhost:8500",
"Service": {
//Http Grpc
"Option": "Http",
"HealthCheck": {
"Url": "http://localhost:1510/health",
//单位:秒
"Timeout": 10,
//单位:秒
"Interval": 10
},
"Name": "Wing.Demo_1.5",
"Host": "localhost",
"Port": 1510,
"LoadBalancer": {
//RoundRobin WeightRoundRobin LeastConnection
"Option": "WeightRoundRobin",
//权重
"Weight": 50
},
"Scheme": "http",
"Developer": "linguicheng"
},
//定时同步数据时间间隔,单位:秒 小于等于0表示立即响应
"Interval": 10,
//数据中心
"DataCenter": "dc1",
//等待时间,单位:分钟
"WaitTime": 3
},
"ConnectionStrings": {
"Wing": "Data Source=192.168.56.96;User Id=sa;Password=wing123.;Initial Catalog=Wing;TrustServerCertificate=true;Pooling=true;Min Pool Size=1"
},
//自动同步实体结构到数据库
"UseAutoSyncStructure": true,
// 如果不启用EventBus,可以删除RabbitMQ配置
"RabbitMQ": {
"HostName": "192.168.56.99",
"UserName": "admin",
"Password": "admin",
"VirtualHost": "/",
"Port": 5672,
//消息过期时间,单位:毫秒,过期会自动路由到死信队列,小于或等于0则永久有效
"MessageTTL": 0,
"ExchangeName": "Sample.GateWay",
//每次投递消息数量
"PrefetchCount": 1
},
"Gateway": {
// 请求日志
"Log": {
// 是否启用网关日志记录
"IsEnabled": true,
// 是否启用事件总线(RabbitMQ)存储日志,生产环境推荐启用,可以提升程序的性能
"UseEventBus": false
}
}
}
查看运行效果
- 运行示例 1.2 并启动当前示例程序,浏览器访问
http://localhost:1510/Wing.Demo_1.2/weatherforecast ,运行效果如下图:
- 运行示例 1.3,浏览器访问 http://localhost:1310/wing/index.html#/gateWayLog ,可以看到网关请求日志,运行效果如下图:
服务地址组成
请求服务地址默认是{网关IP或域名}/{服务名}/{服务路由},例如:http://localhost:1510/Wing.Demo_1.2/weatherforecast