





















1. consul 的部署与配置
参考:Docker - 部署Consul 新 - 无心々菜 - 博客园
参考:NETCORE - Consul 注册 新 - 无心々菜 - 博客园
2. kong 的部署
参考:Docker 部署 kong 网关 - 无心々菜 - 博客园
Kong OSS 版本的一致性哈希只对静态 upstream targets 生效,
不支持从 Consul 自动获取和维护服务实例,
如需 Consul 动态发现需使用 Enterprise 或自行实现同步机制。
在需要 Consul 服务发现 + 一致性哈希的场景下,
APISIX 开源版可原生支持动态实例变更,
而 Kong OSS 需额外同步机制或企业版支持。
配置 D:\DockerMapping\Kong\kong.yml
_format_version: "3.0"
_transform: true
services:
- name: api-assist # 对应 Consul 的 ServiceName
host: api-assist.service.consul # Consul DNS 名称
port: 7096 # 对应 ServicePort
protocol: https # 对应 ServiceScheme
routes:
- name: api-assist-route
paths:
- /api-assist # Kong 暴露出来的访问前缀
- name: kong-config
url: http://localhost:8001/config # Admin API 内部调用
routes:
- name: kong-config-route
paths:
- /current-config
重启 docker 容器
docker-compose restart kong
由于我的 kong 是 DBless 版本,没有用 数据库 版本,
所以在 Kong Manager (http://localhost:18002)管理界面 看不到配置。
可以通过以下页面查看:
访问: http://localhost:18001/services

访问:localhost:18001/config?format=yaml
访问:localhost:18000/current-config

1. localhost:18000/api-assist/health
2. 10.10.0.98:18000/api-assist/health
3. localhost:18000/api-assist/Test/test


1. 在项目中增加接口,用于负载均衡测试
/// <summary>
/// 获取当前请求的URL
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("current-url")]
public IActionResult GetCurrentUrl()
{
var request = HttpContext.Request;
var fullUrl = $"{request.Scheme}://{request.Host}{request.PathBase}{request.Path}{request.QueryString}";
return Ok(fullUrl);
}
2. 发布项目3份

它们的配置文件如下



3. 启动项目
PS D:\project-publish\railassist1> dotnet .\RailAssist.Controllers.dll --urls="http://0.0.0.0:7196"
PS D:\project-publish\railassist2> dotnet .\RailAssist.Controllers.dll --urls="http://0.0.0.0:7296"
PS D:\project-publish\railassist3> dotnet .\RailAssist.Controllers.dll --urls="http://0.0.0.0:7396"
4. 在consul管理页面上可以看到注册的服务

5. kong 配置:
D:\DockerMapping\Kong\kong.yml 配置
_format_version: "3.0"
_transform: true
upstreams:
- name: api-assist-upstream
# 可选:轮询策略,默认是 round-robin
algorithm: round-robin
targets:
- target: 10.10.32.37:7196 # 第一个实例
weight: 1
- target: 10.10.32.37:7296 # 第二个实例
weight: 1
- target: 10.10.32.37:7396 # 第三份实例
weight: 1
# 定义路由,通过 upstream 转发
services:
- name: api-assist
host: api-assist-upstream # 这里指向上面的 upstream
protocol: http
routes:
- name: api-assist-route
paths:
- /api-assist
Upstream 负载均衡算法 的配置项在后面。
6. 重启 kong服务
docker-compose restart kong
7. 测试
http://localhost:18000/api-assist/Test/current-url
目前为轮询调用,如下结果



完成。
8. 参考:
Upstream 负载均衡算法 的配置项
🧭 1️⃣ 支持的负载均衡算法
Kong(3.x / DBless 模式)支持以下几种:
| 参数名 | 含义 | 特点 |
|---|---|---|
⚙️ 2️⃣ 示例配置对比
⚙️ 默认(Round-Robin)
行为:每个请求依次轮询:7096 → 7097 → 7098 → 再循环
⚙️ 一致性哈希(Consistent Hashing)
行为:根据 X-User-ID 请求头做哈希,使同一个用户总是被分配到同一个实例(可保持 session)。
支持以下哈希来源:
| 参数 | 说明 |
|---|---|
⚙️ 最少连接数(Least Connections)
⚙️ 最低延迟调度 - 仅企业版(least-latency)
虽然不能直接用 least-latency,但你可以通过 健康检查 + least-connections 达到类似效果:
如上kong轮询三个指定服务,如下可直接轮询consul里面的服务。
直接配置 services ,不需要配置 upstreams
# 定义路由,通过 upstream 转发
services:
- name: api-assist
# host: api-assist-upstream # 这里指向上面的 upstream
host: api-assist.service.consul # 直接使用Consul DNS
protocol: http
routes:
- name: api-assist-route
paths:
- /api-assist
end.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。