MassTransit 如何实现嗅探器

问题描述 投票:0回答:1

关于我的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 对象,无法进行转换。

c# masstransit
1个回答
0
投票

正如 documentation 指出的那样,我正在尝试做的事情似乎不是一个好主意:

当工程师刚接触消息时,一个常见的错误是为消息创建一个基类,并尝试在消费者中分派该基类——包括子类的行为。哎哟。这总是会导致痛苦和痛苦,所以对基类说不。

© www.soinside.com 2019 - 2024. All rights reserved.