当前位置: 首页 > 工具软件 > Tokio-axum > 使用案例 >

Rust - axum(01)分离路由模块

柯捷
2023-12-01

概述

网上有很多axum框架的教程,但是都不是那么详细,根据业务的需求,准备把原有的分布式更换成以Rust axum 的web微服务,认真记录当前的每一步拆解,供朋友们交流和学习。

最小例子

mod routers;

#[tokio::main]
async fn main() {
    // run it with hyper on localhost:3000
    let app = routers::get_router();
    axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
        .serve(app.into_make_service())
        .await
        .unwrap();
}

代码说明:监听本地3000端口,.await进行等待阻塞,分离了请求的路由层。

routers 模块代码

use axum::{
    Router,
    routing::{get},
    http::{StatusCode, Uri},
    handler::Handler
};

pub async fn get_router() -> anyhow::Result<Router> {
    let routers = Router::new()
        .route("/", get(get_root))
        .route("/stark", get(get_stark))
        .fallback(fallback.into_service());

    Ok(routers)
}

async fn get_root() -> String {
    String::from("hello,axum")
}

async fn get_stark() -> String {
    String::from("hello,stark")
}

async fn fallback(url: Uri) -> (StatusCode,String) {
    println!("未知路由:{}", url);
    (StatusCode::INTERNAL_SERVER_ERROR,"未知路由:".to_string())
}

use 是引入所需的依赖,当所有的路由都没有匹配上的时候,fallback进行回调处理,下一个要整理的就是接受参数的部分代码了。

加油,我自己!

 类似资料: