关于我的previous question,我有相同的消息层次结构,我想实现一个可以处理所有不同消息的消费者,以实现一种嗅探器。
我虽然在类似的东西
public class Sniffer : IConsumer<IntegrationEvent>
{
readonly ILogger<Sniffer> _logger;
public Sniffer(ILogger<Sniffer> logger)
{
_logger = logger;
}
public Task Consume(ConsumeContext<IntegrationEvent> context)
{
IntegrationEvent data = context.Message;
_logger.LogInformation($"EVENT: ***{data.Code} - {data.DateTime}***");
if (code == "Event1")
{
DataEvent1 dataEvent1 = ??????
_logger.LogInformation($"EVENT1: ***{dataEvent1.DataEvent1}***");
}
else if (code == "Event2")
{
DataEvent2 dataEvent2 = ??????
_logger.LogInformation($"EVENT2: ***{dataEvent2.DataEvent2}***");
}
return Task.CompletedTask;
}
}
有什么方法可以从 context.Message 中获取 DataEvent1 或 DataEvent2 对象?也许我需要使用不同的序列化器/反序列化器而不是默认的?
我试过前面的代码,但我在消费者中获得的序列化对象只是一个 IntegrationEvent 对象,无法进行转换。
正如 documentation 指出的那样,我正在尝试做的事情似乎不是一个好主意:
当工程师刚接触消息时,一个常见的错误是为消息创建一个基类,并尝试在消费者中分派该基类——包括子类的行为。哎哟。这总是会导致痛苦和痛苦,所以对基类说不。