向下转换Consume方法中收到的消息

时间:2017-04-10 13:32:29

标签: c# masstransit

为了限制消费者(和总线)的数量,我们尝试将一些处理分组到一个Consumer()/ Queue中。

但是当我将消费者中的消息转换为正确的对象时,我遇到了问题。

假设我有一个Consumer应该处理两种请求类型。 2个子请求类型派生自基类型,我将消息作为派生类型发送,Consumer方法将其作为基类型捕获,但它不能断定请求类型是派生类型之一。

我计划为每个派生类型创建一个Custom Consume()方法。从主(初始)Consume()方法我想在其中一个派生类型中调用特定的自定义Consume()方法,但我无法想办法做到这一点。

与序列化有关,因为序列化发生在后台,我无法操纵这个或者我不知道该怎么做。

我希望你理解我的问题。我有什么办法可以完成这个任务吗?同样,主要原因是限制队列数量,消耗方法。

2 个答案:

答案 0 :(得分:1)

您应该创建单独的使用者,每个子类一个,并直接使用子类。否则,您只是尝试复制已由MassTransit处理的功能。

考虑查看有关创建消息合同,多态等的文档。

http://masstransit-project.com/

答案 1 :(得分:0)

context.TryGetMessage 可以被调用,它在内部对想要的类型进行 Json 反序列化(如果可能的话):

public void Consume(ConsumeContext<IGeneralInterface> context)
{
    ConsumeContext<SpecificImplementation> specificImplementation;

    if (context.TryGetMessage(out specificImplementation))
    {
        Console.WriteLine(specificImplementation.FieldIWant);
    }
}