reqwest-lb
A crate for reqwest support load balancer, use
the reqwest-middleware.
Overview
This crate provide a middleware LoadBalancerMiddleware, it implement reqwest-middleware::Middleware.
-
dependencies
[dependencies]
reqwest = "0.12"
reqwest-middleware = "0.3"
reqwest-lb = "0.1"
-
example
use reqwest::{Client, Url};
use reqwest_lb::LoadBalancerMiddleware;
use reqwest_lb::SimpleLoadBalancer;
use reqwest_lb::{LoadBalancerFactory, LoadBalancerPolicy};
use reqwest_middleware::{ClientBuilder, ClientWithMiddleware};
pub fn create<const N: usize>(
ports: [u16; N],
policy: LoadBalancerPolicy<Url>,
) -> ClientWithMiddleware {
let mut factory = LoadBalancerFactory::default();
let mut urls = Vec::with_capacity(N);
for port in ports {
urls.push(Url::parse(format!("http://127.0.0.1:{}", port).as_str()).unwrap());
}
let load_balancer = SimpleLoadBalancer::new(urls, policy);
factory.add("example-server", load_balancer);
let middleware = LoadBalancerMiddleware::new(factory);
ClientBuilder::new(Client::builder().no_proxy().build().unwrap())
.with(middleware)
.build()
}
pub async fn run() {
let client = create([3001, 3002], LoadBalancerPolicy::RoundRobin);
let response = client.get("lb://example-server/").send().await.unwrap();
let response = client.get("lb://example-server/").send().await.unwrap();
}
-
load balancer policy
- RoundRobin (default)
- Random
- First
- Last
- Weight
-
discovery
...
License
This project is licensed under the Apache 2.0