Проблема с кодировкой символов сообщений в сообщениях Amazon SQS

У меня довольно загадочная проблема с Amazon SQS и Zend (1.11.2). Я отправляю сообщение в очередь, которую я настроил, с фрагментом, который выглядит следующим образом:

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

Сообщение поступает в приложение на дальней стороне и выглядит так:

"opt1%3Dfoo+opt2%3Dbar"

Принимающее приложение написано на Java с использованием библиотеки com.xerox.amazonws.sqs2 и сейчас находится в разработке.

Был аналогичный код отправки в более старом модуле php, который использовал Tarzan под Drupal, который работал очень хорошо. Я искал сверху и снизу, читал документацию по Zend, Amazon и библиотеке Java, и я застрял.

Кодировка строки понятна, но я не узнаю используемый метод. Дальнейшие тесты показывают, что одинарные кавычки, угловые скобки и т. д. также экранируются как шестнадцатеричные.

Любые идеи?

Кен


person Ken    schedule 16.02.2011    source источник
comment
Еще немного информации. Zend кодирует исходящие сообщения и декодирует входящие сообщения. Из того, что я вижу, видно, что библиотека Java Typica не выполняет urldecode. Также кажется, что библиотека Tarzan PHP также не выполняет ulrencoding. Я, должно быть, упускаю из виду, как работает совместимость с этими библиотеками.   -  person Ken    schedule 18.02.2011


Ответы (1)


Typica (com.xerox.amazonaws) имеет 'encoded, который внутренне использует Base64 для кодирования сообщений. Это включено по умолчанию.

В целом мы обнаружили, что кодирование сообщений с использованием Base64 менее проблематично, чем кодирование URL/процентов при использовании SQS.

Я бы использовал Base64 для текста сообщения в PHP, записал бы его в очередь, и Typica должна была бы нормально декодировать, используя конфигурацию по умолчанию.

person Uriah Carpenter    schedule 20.03.2011
comment
Это замечательно, но наборы инструментов, такие как Zend Framework, выполняют кодирование URL-адреса в сообщении до его отправки и декодирование URL-адреса в полученном сообщении. Это поведение не является необязательным. Похоже, что клиенты и серверы должны быть согласованными для работы. Кодировка Base64 или URL-адреса — хорошие варианты, но они не взаимодействуют. - Кен - person Ken; 21.03.2011
comment
@Ken Кодирование/декодирование Base64 в Typica не является обязательным. При настройке MessageQueue вызовите q.setEncoding(false) и выполните декодирование самостоятельно после прочтения сообщения. - person Uriah Carpenter; 21.03.2011