代码集成及服务自动注册与发现

本章将在上一章的基础上,将 consul_api 集成到我们的 gPRC 和 web 服务中,实现服务的自动注册和自动发现。

本章将以 echo-srvecho-web 进行讨论,calc-srvcalc-web请自(fu)行(zhi)实(dai)现(ma)。

编写服务注册函数

服务的自动注册

#[tokio::main]
async fn main() {
   //...

    tokio::spawn(register(addr));

    println!("EchoServer 监听于 {}", addr);
    //...
}

echo-web 的自动服务注册与发现

服务的自动注册

#[tokio::main]
async fn main() {
    let addr = "0.0.0.0:29527";
    tokio::spawn(register(addr));

    let app = axum::Router::new().route("/echo", 
     //...
}

async fn register(addr: &str) {
    println!("正在注册服务");
    let addrs: Vec<&str> = addr.split(":").collect();
    let addr = addrs[0];
    let port: i32 = addrs[1].parse().unwrap();
    let opt = consul_api::ConsulOption::default();
    let cs = consul_api::Consul::new(opt).unwrap();
    let reg = consul_api::Registration::simple("echo-web", addr, port);
    cs.register(&reg).await.unwrap();
    println!("服务注册成功");
}

服务的自动发现

作业

  • 请实现 calc-srvcalc-web的服务自动注册和发现
  • 请优化 echo-web 中的服务发现:
    • 服务发现是否可以在 main() 中实现:
      • 通过 axum 共享 echo-web 服务的信息
    • 有能力的话,可以为服务发现开发一个连接池
要查看完整内容,请先登录