- APIGatewayByOcelot:该项目的作用是API网关,采用 Ocelot 组件
- ApiOne:该项目为下游API服务测试项目,需使用 Consul 组件注册自己
- ApiTwo:该项目为下游API服务测试项目,需使用 Consul 组件注册自己
- Ids4Center.Mvc:该项目是服务认证授权中心,使用 IdentityServer4 组件
- AccessApiOne:客户端项目,访问需要授权的API接口
- 下载地址
- 解压下载完成之后的压缩包,通过cmd命令行定位到consul.exe所在的目录,运行命令:consul.exe agent --dev
- 通过浏览器访问:http://localhost:8500/ui ,此Consul管理端可以查看注册的服务信息
- 创建两个Asp.net Core WebApi项目
- 下载 Consul nuget包
- 在appsettings.json文件中配置Consul服务端信息
/*服务治理第三方组件Consul相关配置参数*/ "ServiceDiscovery": { "ServiceName": "ApiOne", //本WebApi项目的服务名称,可以随便取名,将显示Consul的管理页面上,届时通过该服务名查找可用的服务站点 "Consul": { "HttpEndpoint": "http://127.0.0.1:8500", "TcpEndpoint": { "Address": "127.0.0.1", "Port": 8600 } } }
- 编写服务注册代码,向Consul注册本项目提供的API服务,详见 RegisterToConsulExtension.cs 代码
- 下载 Ocelot nuget包,已经包含Consul的服务发现功能
- 添加Ocelot.json配置文件,配置参数详见文件。需要注意的是,如果下游API服务需要授权才能访问,只要添加如下配置参数,并在StartUp类中编写相关代码
"AuthenticationOptions": {
"AuthenticationProviderKey": "TestKey",
"AllowedScopes": []
}
- 下载 IdentityServer4 nuget包
- 配置客户端和APIResource参数
- 下载IdentityModel nuget包
- 由于ApiOne应用的API接口是需要授权后才能访问,不能通过浏览器直接访问,所以单独下一个客户端项目访问
- 必须先运行Consul,cmd命令:consul.exe agent --dev
- 启动项目ApiOne和ApiTwo,你可以打开项目所在目录通过命令行命令,每个项目都可以运行多个实例,如:打开ApiOne项目根目录,直接运行如下命令
dotnet run --ip 127.0.0.1 --port 8000
dotnet run --ip 127.0.0.1 --port 8001
这样就启动了ApiOne项目的两个实例,能接受ip和port参数是因为自己写的代码才支持这样运行,同理可以允许多个ApiTwo项目的实例 - 启动Ids4Center.Mvc项目,该项目的端口写死了12345,不需要改动,因为客户端项目AccessApiOne也是写死了这个端口
- 启动APIGatewayByOcelot网关项目,端口默认5000,SSL端口是5001。此时可以通过浏览器访问:https://localhost:5001/two/values 可以看到返回结果, 但访问 https://localhost:5001/one/values 时并未看到任何结果,通过F12查看请求,可以看到服务端返回401(未授权),若要访问该接口,可以启动 客户端AccessApiOne项目查看结果。