消息继承并从消费者中访问该消息



首先,我知道继承不是很好,我们应该小心,但是...

在一个系统中,我设有一组不同的命令,这些命令将其发布给总线以触发适当的服务。现在,我想记录一个事实,即发出了一些消息(不是所有消息,只是子集(。

我认为处理它的理想方式将是一些单独的服务,这些服务刚刚订阅了我感兴趣的消息列表,抓住它并记录下来。

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

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

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消费者无法访问整个消息的问题,因此我无法将内容登录。

是否可以以某种方式解决此问题并访问消息内容?或者,这种方法是完全错误的,我应该使用其他东西?

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

您也可以消耗(或获得(JObject的有效载荷,这将为您提供普通JSON的所有内容。

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

您应该移动

的声明
string Message { get; }

to

public interface IAction

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

最新更新