Локальные переменные Rust axum / hyper-запроса

#rust #rust-tokio #hyper

Вопрос:

Есть ли способ привязать переменную к запросу Axum?

В частности, я пытаюсь добавить идентификатор запроса к каждому событию трассировки. Я могу сделать это с помощью промежуточного программного обеспечения tower::трассировки, подобного этому:

 #[derive(Clone)]
pub struct RequestSpan;

impl<B> tower_http::trace::MakeSpan<B> for RequestSpan {
    fn make_span(amp;mut self, request: amp;http::Request<B>) -> tracing::Span {
        tracing::error_span!(
            "rq",
            id = %ulid::Ulid::new().to_string(),
            method = %request.method(),
            uri = %request.uri(),
            version = ?request.version(),
        )
    }
}

...

let middleware_stack = tower::ServiceBuilder::new()
    .layer(TraceLayer::new_for_http().make_span_with(RequestSpan))
 

Это работает в рамках сервера, но мне также нужно передать идентификатор запроса во внешнюю очередь задач. Есть какие-нибудь предложения?

Ответ №1:

Я превратил его в маленький ящик, следуя решению с форума rustlang