C# NServiceBus处理程序引发元数据错误
在将NServiceBus更新到上周发布的最新版本(也有一个新的实现)之后,我在从客户端发送json时看到了奇怪的错误 我将从客户端发送一条消息,接收者显示此消息: 2016-10-18 22:16:33.612 INFO MFG.Receiver.DeviceHandler收到id为a222b136-6a4e-474e-8012-CC1C24E539的消息 我在下面的处理程序中有一个断点,它显示消息对象已烘焙,应该没有任何问题C# NServiceBus处理程序引发元数据错误,c#,.net,json,rabbitmq,nservicebus,C#,.net,Json,Rabbitmq,Nservicebus,在将NServiceBus更新到上周发布的最新版本(也有一个新的实现)之后,我在从客户端发送json时看到了奇怪的错误 我将从客户端发送一条消息,接收者显示此消息: 2016-10-18 22:16:33.612 INFO MFG.Receiver.DeviceHandler收到id为a222b136-6a4e-474e-8012-CC1C24E539的消息 我在下面的处理程序中有一个断点,它显示消息对象已烘焙,应该没有任何问题 public class DeviceHandler : IHan
public class DeviceHandler : IHandleMessages<DeviceRequest>
{
private readonly IDeviceProvider _provider = new DeviceProvider();
private static readonly ILog Log = LogManager.GetLogger<DeviceHandler>();
public Task Handle(DeviceRequest message, IMessageHandlerContext context)
{
Log.Info($"Got message with id: {context.MessageId}");
...
return context.SendLocal($"Message with Id {context.MessageId} received.");
}
}
我的发件人(客户端)如下所示:
{
"$type": "DeviceRequest, MFG.Domain",
"Id": "devices-65",
"DeviceId": 1,
"Location": "Orlando",
"DeviceType": "test"
}
static void Main()
{
...
using (var channel = connection.CreateModel())
{
var messageId = Guid.NewGuid().ToString();
var properties = channel.CreateBasicProperties();
properties.MessageId = messageId;
var payload = GenerateJsonPayload();
channel.BasicPublish(string.Empty, ServerEndpointName, false, properties, Encoding.UTF8.GetBytes(payload));
Console.WriteLine($"Message with id {messageId} sent to queue.");
}
...
}
public static string GenerateJsonPayload()
{
var obj = new DeviceRequest
{
DeviceId = 1,
DeviceType = "test",
Location = "Orlando"
};
var settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
var result = JsonConvert.SerializeObject(obj, Formatting.Indented, settings);
return result;
}
我以前遇到过“找不到元数据”的问题,这是由于json格式错误或没有类型。如果我删除了JsonSerializerSettings
,并且只传递了一个序列化对象,则会出现以下错误:
2016-10-18 22:31:27.698错误NServiceBus.RecoverabilityExecutor将消息“6405179d-ea36-4264-af2a-704da19af120”移动到错误队列“ERROR”,因为异常导致处理失败:
NServiceBus.MessageDeserializationException:尝试从传输消息6405179d-ea36-4264-af2a-704da19af120-->系统提取逻辑消息时出错。异常:找不到“Newtonsoft.Json.Linq.JObject”的元数据
我不知道我在这里遗漏了什么,这与以前的版本无关。这是虫子还是 为您的
SendLocal
操作使用具体的消息类型
作为处理正在执行的消息的一部分,
return context.SendLocal($“Id为{context.MessageId}的消息已接收”)代码>。这将尝试向本地队列发送“string”类型的消息。NServiceBus告诉您,没有为“string”消息类型注册任何消息元数据。因此,它无法构造消息并抛出异常。是的,我在发布问题的第二天早上注意到了这一点。你是100%的,这就是问题所在。我可以发誓我可以在一个点上传递一个字符串。谢谢你的回答;希望在这方面也能帮助其他人。