我正在尝试运行两个应用程序(一个在3006端口上进行管理,另一个在8080端口上提供数据)。
它们共享数据库池、缓存等。
对于 actix 1.0,我已经实现了这一点(我不知道这是否是最好的方法):
let server = Server::build()
// FIRST APP
.bind("", "0.0.0.0:3006", move || {
HttpService::build().finish({
App::new()
.wrap(actix_Logger::new(
"WMTS %a %r %s %b %{Referer}i %{User-Agent}i %T",
))
.data(pool.clone())
.data(cache.clone())
.service(
web::scope("/utils")
.route(
"one",
web::get().to(api::one),
)
.route("two", web::get().to(api::two))
)
.service(
web::scope("/data")
.route("get_data", web::get().to(api::get_data)),
)
})
})
.unwrap()
// SECOND APP
.bind("", "0.0.0.0:8080", move || {
HttpService::build().finish(
App::new()
.wrap(actix_Logger::new(
"API %a %r %s %b %{Referer}i %{User-Agent}i %T",
))
.data(pool.clone())
.data(cache.clone())
.service(web::resource("/graphql").route(web::post().to(api::graphql)))
.service(web::resource("/health").route(web::get().to(api::health)))
.service(web::resource("/metrics").route(web::get().to(api::metrics))),
)
})
.unwrap();
server.run()?;
但怎么才能在actix 2.0中使其工作呢?
HttpServer
future的错误类型吗?我想将其映射到anyhow::Error
,因为我还需要与另一个不返回std::io::Error
的 future 进行合并。 - Etienne Prothon