在 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
}
}
我们对需要保存到某个审计日志数据库的一组事件使用空标记接口。
但是,在消费者中,消息被转换到这个接口,所以我们得到一个空对象。
我们实际需要的是获取 "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
}
}