日志
tracing feature可以控制调试日志的输出
示例用法
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 mut s =
detector::Service::from_key(detector::ServiceKey::new("mail".to_string(), None));
s.ttl = Some(30);
s.ip = Some("127.0.0.1".to_string());
s.port = Some(3001);
builder.new_detector(s)
};
let mut meta_detector = {
let meta = detector::Meta::new(detector::MetaKey::new("mail".to_string(), None), 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;
}
}