我正在使用cloudx框架发布者订阅者机制来通过azure主题/订阅处理消息。
部分已过期的邮件已移至DeadletterQueue。当我尝试使用MessageReceiver读取这些死信消息时,我收到序列化错误。
var msgReceiver = msgFactory.CreateMessageReceiver(deadletterPath);
BrokeredMessage msg = msgReceiver.Peek();
UserExitMessage deadLetterObject = msg.GetBody<UserExitMessage>();
似乎cloudfx框架修改(或编码)消息,因此它们无法正确反序列化。
任何帮助都会受到赞赏,因为我被困了很长时间。
P.S。 - 只有使用cloudfx发布的消息才会出现此问题,因为使用TopicClient代码发送的死信消息可以正常工作。
答案 0 :(得分:0)
我不确定编码
var messageBody = new StreamReader(msg.GetBody<Stream>(), Encoding.UTF8).ReadToEnd();
但是这将从服务总线获取编码消息。
答案 1 :(得分:0)
默认情况下,CloudFx在向主题发布消息时使用压缩序列化程序。这是为了确保最佳的消息有效载荷大小。此序列化由CloudStorageEntitySerializer
类实现。如果您没有提供自定义序列化器,则发布到SB主题的所有消息都将通过前面提到的标准序列化器。
要直接使用SB API消费消息,只需将其主体读取为Stream,然后将返回的流传递给CloudStorageEntitySerializer
提供的Deserialize方法。这应该产生预期的结果。