MassTransit和messageType属性

时间:2016-10-12 10:21:59

标签: masstransit

我有一个案例是使用rabbitmq / api从远程主机向rabbitmq发布消息,我想将已发布消息的处理传递给MassTransit消费者。

正如我所注意到的那样,使用MassTransit消费者成功处理消息的“最少需要的属性”如下所示:

有效载荷

{
    'messageId':'86fd0000-17e1-ac9e-4bde-08d3f1e8553e',
    'correlationId':'86fd0000-17e1-ac9e-4165-08d3f1e8553e',
    'conversationId':'86fd0000-17e1-ac9e-4d99-08d3f1e8553e',
    'messageType':[
        'urn:message:Tm.Core.Integration.RabbitMq.Bus.Extension:EndScenario',
        'urn:message:Tm.Core.Integration.RabbitMq.Command:IEndScenario',
        'urn:message:Tm.Core.Integration.RabbitMq.Command:ICommand'
    ],
    'message':{
        'correlationId':'86fd0000-17e1-ac9e-4165-08d3f1e8553e',
        'scenarioId':'6c3fda36-8ded-41f0-9536-dd76cd146963'
    }
}

如您所见,messageType属性包含有助于将其传递给负责任的消费者的信息(不是吗?)。

我想问你,有没有办法可以删除该属性并继续处理使用MassTransit使用者传递消息的方式?我真的害怕迟早一些重构会破坏我的代码(messageType依赖于运行时的消息类型,不是吗?)而且我想阻止它。

据我所知,我必须编写一些路由代码(mb获取此消息并发布另一个更多信息)?

我的目标是传递这样的信息:

{
    'messageId':'86fd0000-17e1-ac9e-4bde-08d3f1e8553e',
    'correlationId':'86fd0000-17e1-ac9e-4165-08d3f1e8553e',
    'conversationId':'86fd0000-17e1-ac9e-4d99-08d3f1e8553e',
    'message':{
        'correlationId':'86fd0000-17e1-ac9e-4165-08d3f1e8553e',
        'scenarioId':'6c3fda36-8ded-41f0-9536-dd76cd146963'
    }
}

1 个答案:

答案 0 :(得分:1)

邮件信封的messageType部分是必需的。如果不存在,则无法将消息反序列化为类。

订阅没有类型的邮件的唯一方法是使用查看JToken本身的消费者,例如:

public JsonConsumer :
    IConsumer<JToken>
{}