10 个不稳定版本 (3 个破坏性更改)
0.4.0 | 2022 年 12 月 12 日 |
---|---|
0.4.0-rc.5 | 2022 年 12 月 5 日 |
0.4.0-rc.3 | 2022 年 11 月 27 日 |
0.3.1 | 2022 年 11 月 4 日 |
0.1.0 | 2022 年 7 月 18 日 |
#3 in #fig
每月 175 次下载
45KB
796 行
Axum Strangler
Axum 包的实用程序包,允许您轻松使用 Strangler 图形模式,而无需使用某种类型的网关。
包的目标
为了支持以下用例:您想用 Rust 重写服务,但不能一次迁移所有服务的成本。使用 Strangler
,您可以将 Rust 化的服务放在要迁移的服务前面,并且默认情况下,几乎所有东西都应该仍然工作。在迁移过程中,您将逐步添加更多逻辑/路由到 Rust 服务,并且那些路由将不会由您正在迁移的服务处理。
示例
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
// We want to forward requests we don't handle ourselves to localhost:3333
let strangler_svc = axum_strangler::Strangler::new(
axum::http::uri::Authority::from_static("127.0.0.1:3333"),
);
// Add it as a fallback so everything that isn't covered by routes, get forwarded to the strangled service.
let router = axum::Router::new()
.route("/hello", get(|| async { "Hello, World!" }))
.fallback_service(strangler_svc);
axum::Server::bind(&"127.0.0.1:0".parse()?)
.serve(router.into_make_service())
.await?;
Ok(())
}
功能标志
嵌套路由器
如果您在另一个路由器内部使用 axum 路由器 nested
,则路由转发将不会按预期工作,因为要转发的路径仅是嵌套路由器中定义的路径部分,而不是整个路径(因此,如果您在 /api
上嵌套路由器,则所有请求都会转发,而没有 /api
,只转发它后面的内容)。
要修复此问题,您可以启用功能标志 nested-routers
,这将允许它检索 OriginalUri
以正确转发。
https
允许转发到仅接受 HTTPS 流量的其他服务器
let strangler_svc = axum_strangler::Strangler::builder(
axum::http::uri::Authority::from_static("127.0.0.1:3333"),
).with_http_scheme(axum_strangler::HttpScheme::HTTPS).build();
websocket
允许 Strangler 服务也处理 WebSocket,将请求者的每条消息转发到被 Strangler 服务,反之亦然。
TLS
为了通过 TLS 与 WebSocket 一起工作 (wss://),您需要启用其他功能。您可以选择使用哪个
tokio-tungstenite
依赖项用于 TLS,以下三个功能都映射到该对应的依赖项,但所有三个都启用了 wss://
协议
websocket-native-tls
websocket-rustls-tls-native-roots
websocket-rustls-tls-webpki-roots
tracing-opentelemetry-text-map-propagation
使Strangler传播跟踪信息到被限制者。这可能有助于收集关于正在发生什么的详细信息。此功能仅在当前跟踪span中存在活动的opentelemetry
上下文,并且您已安装opentelemetry::sdk::propagation::TraceContextPropagator
作为opentelemetry::global::set_text_map_propagator
时才有效。
贡献
除非您明确声明,否则您提交的任何贡献,按照Apache-2.0许可证定义,都应作为上述双重许可,不附加任何额外条款或条件。
依赖关系
~7–20MB
~301K SLoC