【问题标题】:Trouble with message character encoding in Amazon SQS messagesAmazon SQS 消息中的消息字符编码问题
【发布时间】:2011-03-21 07:15:14
【问题描述】:

我对 Amazon SQS 和 Zend(1.11.2) 有一个相当令人费解的问题。我正在向我设置的队列发送一条消息,该消息如下所示:

$sqs->send($queueURL, "opt1=foo opt2=bar");

消息进入远端的应用程序并被视为:

"opt1%3Dfoo+opt2%3Dbar"

接收应用程序是使用 com.xerox.amazonws.sqs2 库以 Java 编写的,现已投入生产。

在 Drupal 下使用 Tarzan 的旧 php 模块中有类似的发送代码,它工作得很好。我到处搜索并阅读了 Zend、Amazon 和 Java 库的文档,但我被困住了。

字符串的编码是可以理解的,但我不认识正在使用的方法。进一步的测试表明,单引号、尖括号等也被转义为十六进制。

有什么想法吗?

【问题讨论】:

  • 更多信息。 Zend 正在对出站消息进行 urlencoding 和对入站消息进行 urldecoding。从我所看到的看来,Java Typica 库没有进行 urldecode。 Tarzan PHP 库似乎也没有进行 ulrencoding。我一定错过了互操作性如何与这些库一起工作。

标签: zend-framework amazon-sqs


【解决方案1】:

Typica (com.xerox.amazonaws) 有一个“encoded”选项,该选项在内部使用 Base64 对消息进行编码。这是默认开启的。

总的来说,我们发现在使用 SQS 时,使用 Base64 编码消息比使用 URL/百分比编码更容易。

我会在 PHP 中对消息文本进行 Base64 处理,将其写入队列,然后 Typica 应该使用默认配置很好地解码。

【讨论】:

  • 这很好,但是像 Zend 框架这样的工具包在消息发送之前会对消息进行 URL 编码,并对接收到的消息进行 URL 解码。此行为不是可选的。似乎客户端和服务器需要匹配才能工作。 Base64 或 URL 编码都是不错的选择,但它们不能互操作。 - 肯
  • @Ken Base64 在 Typica 中的编码/解码是可选的。设置 MessageQueue 时调用 q.setEncoding(false) 并在阅读消息后自己进行解码。
猜你喜欢
  • 1970-01-01
  • 2014-11-10
  • 2016-03-05
  • 2015-09-09
  • 1970-01-01
  • 2012-06-09
  • 2021-10-04
  • 2010-12-12
  • 2013-09-05
相关资源
最近更新 更多