gpt4 book ai didi

logging - 如何关联分布式 Vertx 系统中的日志事件

转载 作者:行者123 更新时间:2023-12-04 11:34:23 25 4
gpt4 key购买 nike

在 vertx 的 multiple 模块中做日志时,我们应该能够将单个请求的所有日志关联起来,这是一个基本要求。

由于 vertx 是异步的,所以最好的地方是保留 logid、conversationid、eventid。

我们可以实现任何解决方案或模式?

最佳答案

在基于线程的系统中,当前上下文由当前线程保存,因此 MDC 或任何 ThreadLocal 都可以。

在 Vertx 等基于参与者的系统中,您的上下文就是消息,因此您必须为您发送的每条消息添加一个关联 ID。

对于任何处理程序/回调,您必须将其作为方法参数传递或引用 final方法变量。

为了通过事件总线发送消息,您可以将有效负载包装在 JsonObject 中并将相关 ID 添加到包装器对象

vertx.eventBus().send("someAddr", 
new JsonObject().put("correlationId", "someId")
.put("payload", yourPayload));

或者您可以使用 DeliveryOption 添加相关 ID 作为标题
//send
vertx.eventBus().send("someAddr", "someMsg",
new DeliveryOptions().addHeader("correlationId", "someId"));

//receive
vertx.eventBus().consumer("someAddr", msg -> {
String correlationId = msg.headers().get("correlationId");
...
});

还有更复杂的选项,例如在事件总线上使用拦截器,Emanuel Idi 用它来实现对 Vert.x 的 Zipkin 支持, https://github.com/emmanuelidi/vertx-zipkin ,但我不确定这种集成的当前状态。

关于logging - 如何关联分布式 Vertx 系统中的日志事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42929165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com