消息继承和从消费者获取消息
Message inheritance and getting access to the message from consumer
首先,我知道 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
消费者无法访问整个消息,所以我无法获取要记录的内容。
是否有可能以某种方式解决此问题并访问消息内容?或者,这种方法是完全错误的,我应该使用其他方法?
您应该移动
的声明
string Message { get; }
到
public interface IAction
我的意思是,每个命令都会有一个 Message 和一个 Id,对吗?
您可以使用 context.TryGetPayload<YourMessageType>(out var message)
,但同样您需要知道消息类型。
您还可以使用 JObject
(或获取其有效负载),这将以 JSON.
的形式为您提供所有内容
Observers 更适合日志记录,检查审计功能以了解如何完成。
首先,我知道 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
消费者无法访问整个消息,所以我无法获取要记录的内容。
是否有可能以某种方式解决此问题并访问消息内容?或者,这种方法是完全错误的,我应该使用其他方法?
您应该移动
的声明string Message { get; }
到
public interface IAction
我的意思是,每个命令都会有一个 Message 和一个 Id,对吗?
您可以使用 context.TryGetPayload<YourMessageType>(out var message)
,但同样您需要知道消息类型。
您还可以使用 JObject
(或获取其有效负载),这将以 JSON.
Observers 更适合日志记录,检查审计功能以了解如何完成。