веб-сервисы Amazon — вызов UpdateThing возвращает 504 тайм-аут шлюза при использовании AWS C ++ SDK

Недавно я начал использовать AWS C ++ SDK с некоторым успехом. Те звонки, которые основаны на HTTPS GET, работают нормально. Для IoT REST API я могу создавать вещи и списки вещей.

Однако, когда я вызываю запрос UpdateThing, звонок зависает, и по таймауту я получаю ошибку тайм-аута шлюза AWS 504.

Я попробовал несколько вещей, но безрезультатно. Кажется, есть несколько опубликованных примеров, которые помогут мне расшифровать проблему.

Выход журнала AWS DEBUG находится здесь:

[DEBUG] 2017-01-03 22:08:42 AWSClient [0x7fff755d1000] Request Successfully signed
[DEBUG] 2017-01-03 22:08:42 CurlHandleContainer [0x7fff755d1000] Attempting to acquire curl connection.
[DEBUG] 2017-01-03 22:08:42 CurlHandleContainer [0x7fff755d1000] No current connections available in pool. Attempting to create new connections.
[DEBUG] 2017-01-03 22:08:42 CurlHandleContainer [0x7fff755d1000] attempting to grow pool size by 2
[INFO] 2017-01-03 22:08:42 CurlHandleContainer [0x7fff755d1000] Pool successfully grown by 2
[INFO] 2017-01-03 22:08:42 CurlHandleContainer [0x7fff755d1000] Connection has been released. Continuing.
[DEBUG] 2017-01-03 22:08:42 CurlHandleContainer [0x7fff755d1000] Returning connection handle 0x7f90bc00da00
[DEBUG] 2017-01-03 22:08:42 CurlHttpClient [0x7fff755d1000] Obtained connection handle 0x7f90bc00da00
[DEBUG] 2017-01-03 22:09:42 CurlHttpClient [0x7fff755d1000] Returned http response code 504
[DEBUG] 2017-01-03 22:09:42 CurlHttpClient [0x7fff755d1000] Releasing curl handle 0x7f90bc00da00
[DEBUG] 2017-01-03 22:09:42 CurlHandleContainer [0x7fff755d1000] Releasing curl handle 0x7f90bc00da00
[DEBUG] 2017-01-03 22:09:42 CurlHandleContainer [0x7fff755d1000] Notified waiting threads.
[DEBUG] 2017-01-03 22:09:42 AWSClient [0x7fff755d1000] Request returned error. Attempting to generate appropriate error codes from response
[ERROR] 2017-01-03 22:09:42 AWSClient [0x7fff755d1000] No response body.  Response code: 504

Код является:

Aws::IoT::Model::UpdateThingRequest request;
Aws::IoT::Model::AttributePayload payload;

payload.AddAttributes("manufacturer",manufacturer);
payload.AddAttributes("product",product);
payload.AddAttributes("type",type);
payload.SetMerge(true);

request
.WithThingName(name)
.WithAttributePayload(payload);

auto outcome = _client->UpdateThing(request);

if (outcome.IsSuccess()) {
log.info("Sucess");
} else {
log.info("Error: %s: %s",outcome.GetError().GetExceptionName().c_str(),
outcome.GetError().GetMessage().c_str());
}

0

Решение

Кажется, моя проблема заключалась в том, что библиотека curl Mac OS X (7.52.1) обрабатывала запрос PATCH. По умолчанию он не вызывал зарегистрированную функцию данных (зарегистрирован через CURLOPT_READFUNCTION).

Я решил эту проблему путем исправления файла CurlHttpClient.cpp, чтобы добавить параметр CURLOPT_POST для запроса PATCH.

https://github.com/aws/aws-sdk-cpp/pull/401

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector