为了限制消费者(和总线)的数量,我们尝试将一些处理分组到一个Consumer()/ Queue中。
但是当我将消费者中的消息转换为正确的对象时,我遇到了问题。
假设我有一个Consumer应该处理两种请求类型。 2个子请求类型派生自基类型,我将消息作为派生类型发送,Consumer方法将其作为基类型捕获,但它不能断定请求类型是派生类型之一。
我计划为每个派生类型创建一个Custom Consume()方法。从主(初始)Consume()方法我想在其中一个派生类型中调用特定的自定义Consume()方法,但我无法想办法做到这一点。
与序列化有关,因为序列化发生在后台,我无法操纵这个或者我不知道该怎么做。
我希望你理解我的问题。我有什么办法可以完成这个任务吗?同样,主要原因是限制队列数量,消耗方法。
答案 0 :(得分:1)
您应该创建单独的使用者,每个子类一个,并直接使用子类。否则,您只是尝试复制已由MassTransit处理的功能。
考虑查看有关创建消息合同,多态等的文档。
答案 1 :(得分:0)
context.TryGetMessage
可以被调用,它在内部对想要的类型进行 Json 反序列化(如果可能的话):
public void Consume(ConsumeContext<IGeneralInterface> context)
{
ConsumeContext<SpecificImplementation> specificImplementation;
if (context.TryGetMessage(out specificImplementation))
{
Console.WriteLine(specificImplementation.FieldIWant);
}
}