41 lines
1.8 KiB
YAML
41 lines
1.8 KiB
YAML
# Provider 返回连续 5 次合法空结果后,Routing 从 A 原子前进到 B。
|
||
version: 1
|
||
security: {requireProtectionOnPublicListen: true}
|
||
gateway: {enabled: true, listen: '127.0.0.1:8080', auth: {mode: none}}
|
||
routing:
|
||
- name: sequential-gateway
|
||
enabled: true
|
||
purpose: gateway
|
||
match: {hostRegex: '.*'}
|
||
upstreams: [provider-a, provider-b]
|
||
strategy:
|
||
type: sequential
|
||
switchAfterEmptyFetch: 5
|
||
endBehavior: stayLast
|
||
onUnavailable: {action: reject}
|
||
upstreams:
|
||
provider-a:
|
||
enabled: true
|
||
exposure: [gateway]
|
||
provider: {billingMode: fetch, protocols: [http]}
|
||
api: {url: https://provider-a.example/proxies, method: GET, auth: {type: none}, template: '{{.}}'}
|
||
proxyAuth: {type: response}
|
||
pool: {maxSize: 500}
|
||
capacity: {maxConcurrencyPerProxy: 10}
|
||
refill: {reconcileInterval: 1s, minimumAvailableSlots: 25, targetAvailableSlots: 50}
|
||
lifecycle: {ttl: 2m, allocationSafetyMargin: 15s}
|
||
fetch: {estimatedIPsPerCall: 10, requestInterval: 1s, timeout: 3s, maxAttempts: 3, maxInFlight: 1, maxTotal: 10000}
|
||
check: {interval: 30s, jitter: 20, maxInFlight: 100, timeout: 2s, maxAttempts: 2, maxConsecutiveFailures: 3}
|
||
provider-b:
|
||
enabled: true
|
||
exposure: [gateway]
|
||
provider: {billingMode: subscription, protocols: [http]}
|
||
api: {url: https://provider-b.example/proxies, method: GET, auth: {type: none}, template: '{{.}}'}
|
||
proxyAuth: {type: response}
|
||
pool: {maxSize: 500}
|
||
capacity: {maxConcurrencyPerProxy: 10}
|
||
refill: {reconcileInterval: 1s, minimumAvailableSlots: 25, targetAvailableSlots: 50}
|
||
lifecycle: {ttl: 3m, allocationSafetyMargin: 15s}
|
||
fetch: {estimatedIPsPerCall: 10, requestInterval: 2s, timeout: 3s, maxAttempts: 3, maxInFlight: 1}
|
||
check: {interval: 30s, jitter: 20, maxInFlight: 100, timeout: 2s, maxAttempts: 2, maxConsecutiveFailures: 3}
|