0

我正在尝试遵循使用 Windows Azure 队列处理大型消息的最佳实践,但我遇到了第一个障碍。该文章建议在将消息添加到 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(即不压缩地传递字符串)的调用会导致消息“测试”成功添加到队列中。

有谁知道我可以如何克服这个问题?

4

1 回答 1

1

我相信您收到此错误的原因是因为当您压缩字符串时,您会得到一个类似x┌♂I-.☺ ♥▌☺íe. 正如你所看到的,它有一些看起来很奇怪的字符。您可以做的一件事是将该字符串转换为 base64 编码格式,然后将其保存为消息。

$compressedMessage = gzcompress('Test', 9);

$queueRestProxy->createMessage("test", base64_encode($compressedMessage));

我只是尝试了同样的方法,它正确保存了消息。您需要记住的一件事是,当您收到消息时,必须先对其进行解码,然后再对其进行解压缩。

于 2014-02-07T21:14:38.887 回答