在 MassTransit 消费者中获取动态对象

Obtain dynamic object in MassTransit consumer

我们对需要保存到某个审计日志数据库的一组事件使用空标记接口。

但是,在消费者中,消息被转换到这个接口,所以我们得到一个空对象。

我们实际需要的是获取 "dynamic" 或保留消息正文,以便我们可以将其发送到审计数据库 "as-is" 因为我们的数据库可以保存 JSON 文档.但是我们看不到如何从上下文中获取 JSON 的消息体。有可能吗?

如果你真的想提高效率,你可以让你的消费者使用现在的界面,但是,在你的消费者中,从消息上下文中获取 JToken,并使用 JToken 来保存 JSON 的消息。这样,您的消费者不需要知道每个对象类型,也不需要知道该对象类型的程序集。

public async Task Consume(ConsumeContext<IEvent> context)
{
    ConsumeContext<JToken> jsonContext;
    if(context.TryGetMessage(out jsonContext))
    {
        _eventStore.Save(jsonContext.Message); // the JToken
    }
}