我有一个案例是使用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'
}
}
答案 0 :(得分:1)
邮件信封的messageType
部分是必需的。如果不存在,则无法将消息反序列化为类。
订阅没有类型的邮件的唯一方法是使用查看JToken
本身的消费者,例如:
public JsonConsumer :
IConsumer<JToken>
{}