即使传入消息的content_type为application/vnd.masstransit+xml
,MassTransit仍然会尝试使用JsonDeserializer。我的假设(可能是错误的)是MassTransit将根据传入的 content_type 标头使用正确的反序列化器。
注意:我正在测试中,直接在RabbitMQ管理控制台中向交换机发送消息。
错误是:
MT-Reason: fault
MT-Fault-Message: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
MT-Fault-Timestamp: 2017-11-14T22:28:23.9008730Z
MT-Fault-StackTrace: at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonSerializer.Deserialize[T](JsonReader reader)
at MassTransit.Serialization.JsonMessageDeserializer.MassTransit.IMessageDeserializer.Deserialize(ReceiveContext receiveContext)
我已使用以下代码配置了我的接收端点(来自Castle Windsor容器):
sbc.ReceiveEndpoint(host, "my-consumer", ep =>
{
ep.UseMessageScope();
ep.LoadFrom(container);
});
我尝试过的其他内容:
1
ep.UseXmlSerializer();
2
ep.AddEndpointSpecification(new SupportMessageDeserializerReceiveEndpointSpecification(XmlMessageSerializer.XmlContentType, () => new XmlMessageDeserializer(XmlMessageSerializer.XmlSerializer)));
3
ep.AddEndpointSpecification(new SupportMessageDeserializerReceiveEndpointSpecification(XmlMessageSerializer.XmlContentType, () => new XmlMessageDeserializer(JsonMessageSerializer.Deserializer)));
4
sbc.UseXmlSerializer();
这些似乎都没有任何影响。
答案 0 :(得分:1)
简单 -
MassTransit不使用content_type
的标准RabbitMq 属性,而是使用名为Content-Type