pub enum DiscoverySource {
Static(Vec<String>),
EnvPrefix(String),
File(String),
Dns {
hostname: String,
port: u16,
},
DnsSrv {
record: String,
},
Consul {
addr: String,
service: String,
},
Docker {
label: String,
socket_path: String,
},
EtcdWatch {
endpoints: Vec<String>,
prefix: String,
},
}Expand description
Controls how BackendPool discovers backend addresses.
Variants§
Static(Vec<String>)
Fixed list of "host:port" addresses — never refreshed.
EnvPrefix(String)
Scan environment variables PREFIX_0, PREFIX_1, … until one is absent.
File(String)
Read one host:port per line from a file. Blank lines and lines starting
with # are ignored.
Dns
Resolve hostname via A-record DNS lookup; format each IP as ip:port.
DnsSrv
Resolve record (e.g. _http._tcp.example.com) via SRV lookup. Only the
lowest-priority tier of records is used; within that tier each target:port
is repeated weight.clamp(1, 20) times in the returned list so a plain
round-robin consumer still sees proportional selection frequency — see
[dns_srv] module docs for the exact algorithm and its bound.
Consul
Query a Consul agent’s /v1/health/service/:name endpoint. addr is
host:port of the agent (e.g. 127.0.0.1:8500); only instances passing
all health checks are returned.
Docker
Query the Docker Engine API (over a Unix domain socket) for running
containers carrying label, using each container’s value for that
label as the backend address directly (e.g. rws.backend=10.0.0.5:8080)
— see [docker] module docs for why the label value, not a published
port guess, is the address. Unix-only; a no-op elsewhere.
EtcdWatch
Watch an etcd v3 key prefix via its gRPC-gateway JSON/HTTP /v3/watch
endpoint. Unlike every other source, this is not driven by the
generic poll loop — BackendPool::start spawns a dedicated
long-lived connection instead, applying PUT/DELETE events
incrementally as they arrive rather than re-listing on each one.
resolve() (and therefore plain refresh()) still performs a one-shot
/v3/kv/range listing, so a pool built with this source is usable
without ever calling start(), just without live updates. Plain HTTP
only — no TLS support yet.
Auto Trait Implementations§
impl Freeze for DiscoverySource
impl RefUnwindSafe for DiscoverySource
impl Send for DiscoverySource
impl Sync for DiscoverySource
impl Unpin for DiscoverySource
impl UnsafeUnpin for DiscoverySource
impl UnwindSafe for DiscoverySource
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more