refactor(proxy): 重构代理池并添加环境变量支持

-重构了代理配置结构体,更名为 Config
- 添加了从环境变量读取代理列表的功能
- 更新了代理池相关代码,使用新的配置结构体
- 修改了 Heepay 相关代码,优化了商品信息处理
This commit is contained in:
danial
2025-04-12 14:13:29 +08:00
parent b9139614de
commit e566dca395
5 changed files with 22 additions and 15 deletions

View File

@@ -1,6 +1,9 @@
package config
import (
"context"
"gateway/internal/otelTrace"
"go.uber.org/zap"
"net"
"os"
"strings"
@@ -32,6 +35,7 @@ func GetMQAddress() string {
func GetProxyConfig() []string {
// 获取环境变量的值
value := os.Getenv("proxy")
otelTrace.Logger.WithContext(context.Background()).Info("proxy", zap.Any("proxy", value))
// 如果环境变量未设置或为空,返回空切片
if value == "" {
return []string{}

View File

@@ -1,6 +1,6 @@
package proxy
// ProxyConfig 代理配置
// Config 代理配置
type Config struct {
Proxies []string
TestURL string

View File

@@ -1,7 +1,9 @@
package proxy
import (
"context"
"fmt"
"gateway/internal/otelTrace"
"time"
)
@@ -35,7 +37,7 @@ func Example() {
startTime := time.Now()
proxy, err := pool.GetRandomProxy()
if err != nil {
fmt.Printf("获取代理失败: %v\n", err)
otelTrace.Logger.WithContext(context.Background()).Error("获取代理失败")
return
}

View File

@@ -3,6 +3,7 @@ package proxy
import (
"context"
"fmt"
"github.com/duke-git/lancet/v2/slice"
"net/http"
"net/url"
"sync"
@@ -93,9 +94,19 @@ func (p *Pool) GetRandomProxy() (*Proxy, error) {
// 过滤出有效的代理
validProxies := make([]*Proxy, 0)
slice.SortBy(p.proxies, func(a, b *Proxy) bool {
return a.UseCount < b.UseCount
})
var selectedProxy *Proxy
for _, proxy := range p.proxies {
_ = p.TestProxy(proxy)
if proxy.IsValid && time.Since(proxy.LastTest) < time.Duration(p.config.Timeout)*time.Second {
validProxies = append(validProxies, proxy)
selectedProxy = proxy
proxy.UseCount += 1
break
}
}
@@ -103,16 +114,6 @@ func (p *Pool) GetRandomProxy() (*Proxy, error) {
return nil, fmt.Errorf("no valid proxies available")
}
// 选择使用次数最少的代理
var selectedProxy *Proxy
minUseCount := int64(1 << 62)
for _, proxy := range validProxies {
if proxy.UseCount < minUseCount {
minUseCount = proxy.UseCount
selectedProxy = proxy
}
}
return selectedProxy, nil
}
@@ -179,7 +180,7 @@ func (p *Pool) UpdateProxies() {
}
// GetProxyStats 获取代理统计信息
func (p *Pool) GetProxyStats() []map[string]interface{} {
func (p *Pool) GetProxyStats() []map[string]any {
p.mu.RLock()
defer p.mu.RUnlock()

View File

@@ -11,12 +11,12 @@ import (
_ "gateway/internal/service/message"
"gateway/internal/service/notify"
_ "gateway/internal/service/supplier/third_party"
"github.com/beego/beego/v2/server/web"
"log"
_ "net/http/pprof"
"github.com/beego/beego/v2/server/web/context"
"github.com/beego/beego/v2/server/web"
_ "github.com/go-sql-driver/mysql"
)