Cloudfx published messages gives serialization error when read from deadletter

70 Views Asked by At

I am using cloudx frameworks publisher subscriber mechanism for processing messages through azure topic/subscription.

Some of the expired messages are moved to DeadletterQueue. When i try to read those deadletter messages using MessageReceiver, i get serialization error.

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

It seems cloudfx frameworks modify ( or encode ) the messages and hence they are not able to deserialize properly.

Any help would be appreciated as i am stuck from quite some time.

P.S. - This issue occurs only with messages there are published using cloudfx, for deadletter messages that were send using TopicClient code works fine.

2

There are 2 best solutions below

0
On BEST ANSWER

By default, CloudFx uses the compressing serializer when publishing messages to a topic. This is to ensure the optimal message payload size. This serialzer is implemented by the CloudStorageEntitySerializer class. If you don't provide a custom serialzer, all messages published to the SB topic will go through the standard serialzer mentioned earlier.

To consume messages using the SB API directly, just read their body as a Stream and then pass the returned stream to the Deserialize method provided by CloudStorageEntitySerializer. This should produce the desired outcome.

0
On

I am not sure about the encoding

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

but this will fetch you the encoded message from the service bus.