消息继承和从消费者访问消息

时间:2018-04-03 14:09:53

标签: c# oop masstransit

首先,我知道inheritance is not quite good and we should be careful with it,但是......

在一个系统中,我有一组不同的命令,我发布到总线以触发适当的服务。现在我想记录一些消息(不是所有消息,只是一个子集)的发布。

我认为处理它的理想方式是一些单独的服务,它只订阅了我感兴趣的消息列表,捕获并记录它。

实施它的最佳方法是什么?

我正在考虑使用像这样的继承

public interface IAction
{
}


public interface TestCommand : IAction
{
    Guid Id { get; }
    string Message { get; }
}


public class TestHandler : IConsumer<IAction>, IConsumer<TestCommand>
{
    public async Task Consume(ConsumeContext<IAction> context)
    {
        var action = context.Message;
    }

    public async Task Consume(ConsumeContext<TestCommand> context)
    {
        var cmd = context.Message;
    }
}

但问题是IAction消费者无法访问整个消息,所以我无法获取要记录的内容。

是否有可能以某种方式解决此问题并获取对邮件内容的访问权限?或者,这种方法完全错误,我应该使用别的东西?

2 个答案:

答案 0 :(得分:1)

您可以使用context.TryGetPayload<YourMessageType>(out var message),但您需要知道消息类型。

您还可以使用JObject消耗(或获取有效负载),这将为您提供普通JSON中的所有内容。

观察者更适合记录,请检查审核功能以了解如何完成。

答案 1 :(得分:-1)

您应该移动

的声明
string Message { get; }

public interface IAction

我的意思是,每个命令都会有消息和ID吗?