首先,我知道继承不是很好,我们应该小心,但是...
在一个系统中,我设有一组不同的命令,这些命令将其发布给总线以触发适当的服务。现在,我想记录一个事实,即发出了一些消息(不是所有消息,只是子集(。
我认为处理它的理想方式将是一些单独的服务,这些服务刚刚订阅了我感兴趣的消息列表,抓住它并记录下来。
实施它的最佳方法是什么?
我正在考虑使用这样的继承
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,对吗?