我正试图跟随Best Practices for Handling Large Messages with Windows Azure Queues而我已经陷入了第一道障碍。本文建议在将消息添加到Azure队列之前压缩消息,我尝试使用以下代码进行压缩...
$compressedMessage = gzcompress('Test', 9);
try {
$queueRestProxy->createMessage($queueName, $compressedMessage);
} catch (ServiceException $e) {
$code = $e->getCode();
$error_message = $e->getMessage();
echo $code . ': ' . $error_message . '<br />';
}
不幸的是,ServiceException引发如下......
400: Fail: Code: 400 Value: XML specified is not syntactically valid. details (if any): InvalidXmlDocumentXML specified is not syntactically valid. RequestId:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX Time:2014-02-07T20:04:07.8227706Z316Error parsing Xml content.
删除对gzcompress
的调用(即传递字符串而不进行压缩)会导致消息“Test”成功添加到队列中。
有谁知道如何克服这个问题?
答案 0 :(得分:1)
我相信您收到此错误的原因是因为当您压缩字符串时,您会收到类似 x┌♂I-.☺ ♥▌☺íe
的字符串。正如你所看到的,它有一些怪异的角色。您可以做的一件事是将该字符串转换为base64编码格式,然后将其保存为消息。
$compressedMessage = gzcompress('Test', 9);
$queueRestProxy->createMessage("test", base64_encode($compressedMessage));
我只是尝试了同样的方法,它正确地保存了消息。您需要记住的一件事是,当您收到消息时,您必须在解压缩之前先解码它。