实现代理网关管理接口

This commit is contained in:
2026-04-18 11:15:29 +08:00
parent 6db3caaecb
commit a964fe4d69
7 changed files with 331 additions and 90 deletions

View File

@@ -63,10 +63,27 @@ func (s *channelBaiyinProvider) CreateChannels(source netip.Addr, resourceId int
}
proxy := proxyResult.Proxy
// 获取可用通道
chans, err := lockChans(proxy.ID, batch, count)
// 锁内确认状态并锁定端口,避免与状态切换并发穿透
var chans []netip.AddrPort
err = g.Redsync.WithLock(proxyStatusLockKey(proxy.ID), func() error {
lockedProxy, err := q.Proxy.Where(q.Proxy.ID.Eq(proxy.ID)).Take()
if err != nil {
return err
}
if lockedProxy.Status != m.ProxyStatusOnline {
return core.NewBizErr("无可用主机,请稍后再试")
}
chans, err = lockChans(proxy.ID, batch, count)
if err != nil {
return core.NewBizErr("无可用通道,请稍后再试", err)
}
proxy = *lockedProxy
return nil
})
if err != nil {
return nil, core.NewBizErr("无可用通道,请稍后再试", err)
return nil, err
}
// 获取可用节点