首先,我知道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
消费者无法访问整个消息,所以我无法获取要记录的内容。
是否有可能以某种方式解决此问题并获取对邮件内容的访问权限?或者,这种方法完全错误,我应该使用别的东西?
答案 0 :(得分:1)
您可以使用context.TryGetPayload<YourMessageType>(out var message)
,但您需要知道消息类型。
您还可以使用JObject
消耗(或获取有效负载),这将为您提供普通JSON中的所有内容。
观察者更适合记录,请检查审核功能以了解如何完成。
答案 1 :(得分:-1)
您应该移动
的声明string Message { get; }
到
public interface IAction
我的意思是,每个命令都会有消息和ID吗?