use rand::prelude::SliceRandom;
use tracing::debug;
use super::{DubboBoxService, LoadBalancer};
use crate::{
invocation::Metadata, loadbalancer::CloneInvoker,
protocol::triple::triple_invoker::TripleInvoker,
};
#[derive(Clone, Default)]
pub struct RandomLoadBalancer {}
impl LoadBalancer for RandomLoadBalancer {
type Invoker = DubboBoxService;
fn select_invokers(
&self,
invokers: Vec<CloneInvoker<TripleInvoker>>,
metadata: Metadata,
) -> Self::Invoker {
debug!("random loadbalance {:?}", metadata);
let ivk = invokers.choose(&mut rand::thread_rng()).unwrap().clone();
DubboBoxService::new(ivk)
}
}