0

我正在使用 cloudx 框架发布者订阅者机制通过 azure 主题/订阅处理消息。

一些过期的消息被移动到 DeadletterQueue。当我尝试使用 MessageReceiver 读取这些死信消息时,出现序列化错误。

var msgReceiver = msgFactory.CreateMessageReceiver(deadletterPath);
BrokeredMessage msg = msgReceiver.Peek(); 
UserExitMessage deadLetterObject = msg.GetBody<UserExitMessage>();   

似乎 cloudfx 框架修改(或编码)消息,因此它们无法正确反序列化。

任何帮助将不胜感激,因为我被困了很长时间。

PS - 只有使用 cloudfx 发布的消息才会出现此问题,因为使用 TopicClient 代码发送的死信消息可以正常工作。

4

2 回答 2

0

我不确定编码

var messageBody = new StreamReader(msg.GetBody<Stream>(), Encoding.UTF8).ReadToEnd();

但这将从服务总线中获取编码消息。

于 2014-08-18T09:09:19.343 回答
0

默认情况下,CloudFx 在向主题发布消息时使用压缩序列化程序。这是为了确保最佳的消息有效负载大小。这个序列化器由CloudStorageEntitySerializer类实现。如果您不提供自定义序列化器,则发布到 SB 主题的所有消息都将通过前面提到的标准序列化器。

要直接使用 SB API 使用消息,只需将它们的主体作为 Stream 读取,然后将返回的流传递给由提供的 Deserialize 方法CloudStorageEntitySerializer。这应该会产生预期的结果。

于 2014-08-18T20:48:57.750 回答