chore(gateway): 升级服务依赖链(by AI)

This commit is contained in:
Star 2026-07-19 08:52:00 +08:00
parent dfa5bb5a60
commit aa38470450
6 changed files with 60 additions and 39 deletions

View File

@ -1,5 +1,10 @@
# Changelog
## v1.5.6 (2026-07-19)
- **依赖链升级**: 升级 `service``v1.5.22``discover``v1.5.8`,对齐 Redis 类型化服务发现流程。
- **依赖对齐**: 随模块图同步升级 `cast``config``crypto``encoding``file``http``id``log``rand``safe``shell` 的 patch 版本。
- **文档与测试**: 记录当前兼容基线,新增 `GatewayApp` 构造 Benchmark。
## v1.5.5 (2026-07-18)
- **依赖校验修复**: 升级 `service``v1.5.21``discover``v1.5.7``redis``v1.5.11`,使用稳定版 `redigo v1.9.3`
- **依赖对齐**: 升级 `cast``v1.5.4``crypto``v1.5.4``encoding``v1.5.5``id``v1.5.6``starter``v1.5.6`

View File

@ -2,6 +2,8 @@
基于 `@go/service` 实现的微服务 API 网关。详细路由语法与高级配置参考:[https://apigo.cc/go/service](https://apigo.cc/go/service)
版本基线:`gateway v1.5.6` 对齐 `service v1.5.22``discover v1.5.8`,公开 API 和配置格式保持兼容。
---
## 🚀 1. 快速开始 (1分钟)

View File

@ -1,5 +1,9 @@
# Gateway Test Report
## v1.5.6 验证
- `go list -m all`:模块图使用 `service v1.5.22``discover v1.5.8``redis v1.5.11` 与稳定版 `redigo v1.9.3`
- `go test -v ./...``go test -bench=. ./...` 全部通过。
## v1.5.5 验证
- `go list -m all`:模块图使用 `service v1.5.21``discover v1.5.7``redis v1.5.11` 与稳定版 `redigo v1.9.3`
- `go test -v ./...``go test -bench=. ./...` 全部通过。
@ -22,6 +26,7 @@
## 性能指标 (Benchmark & Efficiency)
- `BenchmarkNewGatewayApp-16`: `17.20 ns/op``32 B/op``1 allocs/op`Apple M3 Max
- **0 Write Lock Jitter**: 核心链路不再像旧版 `ssgo/gateway` 一样在匹配时被写锁拖累。配置下发生效使用纳秒级 Copy-on-Write 指针覆盖。
- **Pub/Sub Target Update**: 热更仅针对修改的单个 Host 拉取单条 HGET消除了轮询和全量遍历的 O(N) 性能损耗。
- 全链路端到端集成测试完成于 **~0.92s**。

View File

@ -228,3 +228,12 @@ func TestGateway(t *testing.T) {
t.Fatalf("Atomic update failed, old route still exists")
}
}
var benchmarkGatewayApp *GatewayApp
func BenchmarkNewGatewayApp(b *testing.B) {
b.ReportAllocs()
for b.Loop() {
benchmarkGatewayApp = NewGatewayApp()
}
}

26
go.mod
View File

@ -3,26 +3,26 @@ module apigo.cc/go/gateway
go 1.25.0
require (
apigo.cc/go/cast v1.5.4
apigo.cc/go/config v1.5.3
apigo.cc/go/log v1.5.8
apigo.cc/go/cast v1.5.5
apigo.cc/go/config v1.5.4
apigo.cc/go/log v1.5.9
apigo.cc/go/redis v1.5.11
apigo.cc/go/service v1.5.21
apigo.cc/go/service v1.5.22
apigo.cc/go/starter v1.5.6
)
require apigo.cc/go/jsmod v1.5.3 // indirect
require (
apigo.cc/go/crypto v1.5.4 // indirect
apigo.cc/go/discover v1.5.7 // indirect
apigo.cc/go/encoding v1.5.5 // indirect
apigo.cc/go/file v1.5.5 // indirect
apigo.cc/go/http v1.5.3 // indirect
apigo.cc/go/id v1.5.6 // indirect
apigo.cc/go/rand v1.5.3 // indirect
apigo.cc/go/safe v1.5.2 // indirect
apigo.cc/go/shell v1.5.4 // indirect
apigo.cc/go/crypto v1.5.5 // indirect
apigo.cc/go/discover v1.5.8 // indirect
apigo.cc/go/encoding v1.5.6 // indirect
apigo.cc/go/file v1.5.6 // indirect
apigo.cc/go/http v1.5.4 // indirect
apigo.cc/go/id v1.5.7 // indirect
apigo.cc/go/rand v1.5.4 // indirect
apigo.cc/go/safe v1.5.3 // indirect
apigo.cc/go/shell v1.5.5 // indirect
apigo.cc/go/timer v1.5.0 // indirect
apigo.cc/go/watch v1.5.2 // indirect
github.com/fsnotify/fsnotify v1.10.1 // indirect

52
go.sum
View File

@ -1,33 +1,33 @@
apigo.cc/go/cast v1.5.4 h1:OH5Vkrc1K19wuazf9VecjwwMwKDFgLQkI3UvwB4umcs=
apigo.cc/go/cast v1.5.4/go.mod h1:GMjjrYn93tWat1U409G7h1jR3ejfLLI7r0efBo9Sbd4=
apigo.cc/go/config v1.5.3 h1:peq1FM2xO+vzPHJf8Dwg3DXm8PtFQMfTFKQj6fpoG7A=
apigo.cc/go/config v1.5.3/go.mod h1:ZiOAjWa1mQIzszaJZN+kO6YU4GXreng+NxkcK/TAkqQ=
apigo.cc/go/crypto v1.5.4 h1:7rFcF9Mns+7BIB13lystvLVsAeYapKsrD26KOrQq2Zk=
apigo.cc/go/crypto v1.5.4/go.mod h1:PheYKHEXmoEFI1AK5PpY1borQWcRlkkSaWncT3cWbhE=
apigo.cc/go/discover v1.5.7 h1:wb2hXr+6mGxZ+yjOuTNzeLSZ8tNaPvn+dl1AuedPRm0=
apigo.cc/go/discover v1.5.7/go.mod h1:Vg41wYA5+M7t883imlQEOwdeUPZPoNrzDWVshum7KYo=
apigo.cc/go/encoding v1.5.5 h1:kduNLWQgtcQqHYobOuu1djbgg8LedkGOe8f18ZMfqzs=
apigo.cc/go/encoding v1.5.5/go.mod h1:Big9q1Zwy4071dXtnrQ3SJDzfa/G7/A60KE/5+M//P8=
apigo.cc/go/file v1.5.5 h1:/+HmDumLu6Qk2KuQL63M9lpgzHTDL+QJ8dStOl7e9gs=
apigo.cc/go/file v1.5.5/go.mod h1:xRVNhctvqOKeBemmcRW/BQfgkc3B+vT/UZVdSc7duUo=
apigo.cc/go/http v1.5.3 h1:nvJh9bqPPcPRv6p8WEw7bJAd0UC+r2zvQA8/QioVLTQ=
apigo.cc/go/http v1.5.3/go.mod h1:cFrPK61y9f1PrsNSJscZT/QVOgkT15o9OP7O8cuMb8Q=
apigo.cc/go/id v1.5.6 h1:Z3PPp8H8FgNHMwHerxtT2GgstueDv4aCDnUUCoQZoFQ=
apigo.cc/go/id v1.5.6/go.mod h1:HcJK691qfBPzvQ/lt8bo/incKUFtG5vENX/rDEgzJh0=
apigo.cc/go/cast v1.5.5 h1:DMbfK3uPhPjRaXutj3StIZIkfjFIATSXfuAOeNOd4Fw=
apigo.cc/go/cast v1.5.5/go.mod h1:GMjjrYn93tWat1U409G7h1jR3ejfLLI7r0efBo9Sbd4=
apigo.cc/go/config v1.5.4 h1:1c/OarGwbz3+6ikurE+a6LJLjtzXvGvbxw3HV/Nk54M=
apigo.cc/go/config v1.5.4/go.mod h1:oN+D2F8ETIyqKp+Yu8R4PRQlUoqR44o35jAHwLrrAq0=
apigo.cc/go/crypto v1.5.5 h1:YQHumieqviNGMhwoxDtMuUdGWAQiGrkVhz9hZRHOhWs=
apigo.cc/go/crypto v1.5.5/go.mod h1:z/FXt0HE7fSMJKF2MF7jY2fSjlHUYYaSffETJ7ZzJmE=
apigo.cc/go/discover v1.5.8 h1:82GGPamZ6X4jVNAsFe1VxgMhA5H9PqHFxWRfUFG+ltY=
apigo.cc/go/discover v1.5.8/go.mod h1:dkvah/jnhUzXsXe/roNtUrLIPs7fMbJrFuIbDvQLWDY=
apigo.cc/go/encoding v1.5.6 h1:v02swVfbFGidD4QcX2ktuHHbCjdSbOB85fhzAXay+7M=
apigo.cc/go/encoding v1.5.6/go.mod h1:Big9q1Zwy4071dXtnrQ3SJDzfa/G7/A60KE/5+M//P8=
apigo.cc/go/file v1.5.6 h1:Y7w3Tyu4e16VuED7rF2pzba+dzGE+hjDnBlIPVHIfzA=
apigo.cc/go/file v1.5.6/go.mod h1:9sdW4ylSOA0HWc8Yt8qdnmMf6nn5SUEmjoPKyXpYXIQ=
apigo.cc/go/http v1.5.4 h1:Tm95WMsXyazFnaaPopdMXv1k9TiaPenLxDQ40WCrsEQ=
apigo.cc/go/http v1.5.4/go.mod h1:cFrPK61y9f1PrsNSJscZT/QVOgkT15o9OP7O8cuMb8Q=
apigo.cc/go/id v1.5.7 h1:Y5Sx6sQBCAdYMCQPTjODZyGMMd1+WRWCy2dWHVq11XQ=
apigo.cc/go/id v1.5.7/go.mod h1:fugudFBqfVNakfm91zZzuzU0P4PULzo6sylB8hRMqxA=
apigo.cc/go/jsmod v1.5.3 h1:S3W317bH0QV2NMeRO1E0v6ySIBOfMWYv/NuQJbvqKWU=
apigo.cc/go/jsmod v1.5.3/go.mod h1:bmyeZtOAP/j5am+YRnaiM89smysK24K7ebk0koFtsSw=
apigo.cc/go/log v1.5.8 h1:/IYtGPWhRjT3OayylDIphkWZIQbpLjqVeSnFEiD3Dy0=
apigo.cc/go/log v1.5.8/go.mod h1:HfFPANMYxJx197SSTXB21Pgxcz/gGqPP8nlSErgd5WE=
apigo.cc/go/rand v1.5.3 h1:O4bPIwyaOWEBCr0nL9A4G4qG48AqiGTCzfPeckm3Ius=
apigo.cc/go/rand v1.5.3/go.mod h1:q1BTFkY/cXE229dDD5Q22lF7T0DoKPV6xAu+6bCrDH4=
apigo.cc/go/log v1.5.9 h1:g8JehZrpVJyesesv+JFig5szEELsO4UjShsjlEihCfc=
apigo.cc/go/log v1.5.9/go.mod h1:b4f/UB5Kk7oiFtkXvG4GVilmHGygWgxELRAdEZrIyfs=
apigo.cc/go/rand v1.5.4 h1:eessFBsKQuoOYdzrStldOGw9f4HqbeO87X95bI4jIBQ=
apigo.cc/go/rand v1.5.4/go.mod h1:q1BTFkY/cXE229dDD5Q22lF7T0DoKPV6xAu+6bCrDH4=
apigo.cc/go/redis v1.5.11 h1:r/kiY3EUD+3YwTd+zMZaRD7eOQZEIvSJwAVnzG96zoQ=
apigo.cc/go/redis v1.5.11/go.mod h1:sCzxIWN+nNIRvR5ePaHsP19hjR52NPfXsq7L1c6A5ec=
apigo.cc/go/safe v1.5.2 h1:EnuEOW/SGwf/5A0nw9LnqfKJE071+TIc6ez8HI9R9Lg=
apigo.cc/go/safe v1.5.2/go.mod h1:2GqCCLLGex4OAhdET3iBWm1R+LIYtmTrvHP8W0iESSw=
apigo.cc/go/service v1.5.21 h1:McZHY+iGh3B6mlrCKvPva9l3vwKiQY8P8ZNGAh7Sths=
apigo.cc/go/service v1.5.21/go.mod h1:koVKi7i6AAKlEpJIXtG/Bk5ix7/GITfXWsasUM+UypE=
apigo.cc/go/shell v1.5.4 h1:Kn6lP6I6d9U0hbyUjpKKFdFZ8RPo4vi4V6AYW8YFzrc=
apigo.cc/go/shell v1.5.4/go.mod h1:FdZWUrcXHGJXo725oSyHqAeFoX0E9yY3PDhrz9hujgY=
apigo.cc/go/safe v1.5.3 h1:9p/BmdlVWLbekpKByZIFC09Qn8Wdhik2eINiwunBxPs=
apigo.cc/go/safe v1.5.3/go.mod h1:Ay8kEPL76DeXH4ifsVTc/3/sfGHlWLQjAp4vi7GA9AI=
apigo.cc/go/service v1.5.22 h1:Q6px5J+qzxcSuKaoEVXseabgk8H7S+52itoN0PZz3E4=
apigo.cc/go/service v1.5.22/go.mod h1:9KLCGsCvRfDwLwJ/1ENUCuFajWW4HmZmj3/AhgtcyW4=
apigo.cc/go/shell v1.5.5 h1:sf1QZiL7IHkoOLdrYX1qT4JWIlYZIAAYGJJXorjscB4=
apigo.cc/go/shell v1.5.5/go.mod h1:FdZWUrcXHGJXo725oSyHqAeFoX0E9yY3PDhrz9hujgY=
apigo.cc/go/starter v1.5.6 h1:hcZbR/70q0XW8xZII8BnGDmIomus//+8sWxGqluyj0U=
apigo.cc/go/starter v1.5.6/go.mod h1:abqfSu+lUz/FySn1VxjT8QeAa3mfKo6WrP5xLddw7QE=
apigo.cc/go/timer v1.5.0 h1:iPo/IQn+iuhBRI1/MR1txwZnamef/RBBfOiIlBiqkgk=