如何从MassTransit Fault事件中获取通用消息json



我有一个基于微服务的应用程序,希望创建一个服务,该服务捕获所有Fault事件及其消息有效负载(作为json),并将它们存储在数据库中,以便以后分析和可能的重新提交。我已经创建了一个Fault使用者,可以捕获Fault,但无法将消息有效负载一般地提取为json。

public Task Consume(ConsumeContext<Fault> context)
{
if (context is PipeContext pipeContext)
{
var result = pipeContext.TryGetPayload(out ConsumeContext<Fault> payload2);
var serCont = context.SerializerContext;

}
Console.WriteLine($"A message faulted:{context.Message.FaultedMessageId} " +
$"{context.Message.Exceptions} " +
$"{context.ConversationId}"
);
return Task.CompletedTask;
}

我可以在context.SerializerContext中看到我想要的全部细节。_message,但这是不可访问的。context.SerializerContext._message我看到你对一个类似问题的评论:

如果您确实希望稍后获得实际的错误消息,您可以使用consumeContext.TryGetMessage(输出变量faultContext),如果它你会把它拿回来的。

我没有"因此,我们希望以JSON的方式处理所有的错误。是否有一种方法可以捕获消息的完整Fault,理想情况下是json,而无需访问系统中的每个T ?我乘坐的是地铁8号线。由于

如果您有消息类型(T),则可以使用TryGetMessage<Fault<T>>,它将返回反序列化的消息类型。

如果你不这样做,或者如果你想直接处理消息中的JSON,使用V8你可以从反序列化器中获得实际的JsonElement并自己导航JSON:

var jsonElement = context.TryGetMessage<JsonElement>()

之前的答案,但对于Newtonsoft: https://stackoverflow.com/a/46779547/1882

最新更新