示例用法
use detector::{DetectMeta, Detector};
use std::time::Duration;
#[tokio::main]
async fn main() {
let builder = etcd_detector::Builder::connect(["localhost:2379"]).await.unwrap();
let mut detect = {
let s = detector::Service {
key: detector::ServiceKey::new("mail".to_string(), None),
ttl: 30,
ip: "127.0.0.1".to_string(),
port: 3001,
};
builder.new_detector(s)
};
let mut meta_detector = {
let meta = detector::Meta {
key: detector::MetaKey::new("mail".to_string(), None),
state: detector::ServiceState::Stateful,
instances: 1,
category: Some(1),
};
builder.new_meta_detector(meta)
};
meta_detector.register().await.unwrap();
println!("{:?}", meta_detector.fetch().await);
println!("{:?}", detect.oneself());
println!("{:?}", detect.status());
println!("{:?}", detect.service());
println!("{:?}", detect.register().await);
println!("{:?}", detect.status());
println!("{:?}", detect.service());
if let Some(mut rx) = detect.oneself() {
tokio::spawn(async move {
loop {
match rx.changed().await {
Err(_) => break,
Ok(status) => println!("status: {:?}", status),
}
}
});
let mut watch_all = detect.watch_all().await.unwrap();
tokio::spawn(async move {
while let Some(e) = watch_all.recv().await {
println!("watch all, recv event:{:?}", e);
}
println!("watch all over");
});
let mut watch = detect.watch().await.unwrap();
tokio::spawn(async move {
while let Some(e) = watch.recv().await {
println!("watch self, recv event:{:?}", e);
}
println!("watch self over");
});
tokio::time::sleep(Duration::from_secs(100)).await;
drop(detect);
tokio::time::sleep(Duration::from_secs(10)).await;
}
}