Отправка полезной нагрузки JSON в облачную задачу Google - PullRequest
0 голосов
/ 18 ноября 2018

Я, вероятно, упускаю что-то невероятно очевидное, но в проекте, над которым я работаю, мне нужно отправить много заданий из CSV-информации для асинхронной обработки, и текущий путь Google App Engine - через их новое (бета-версия) ) Механизм облачных задач.

Он примет полезную нагрузку как часть задачи, поэтому я собирался отправить массив JSON с соответствующими данными каждого задания ... за исключением того, что единственный способ диктовать заголовок "Content-Type: application/json" - это во время создания объекта задачи .

Я использую собственную библиотеку Google cloud-tasks 0.5.0.

Вот то, что я пытался сделать, поскольку, похоже, именно так большинство других не-CURL HTTP POST-запросов будет принимать заголовок Content-Type ...

require_once 'vendor/autoload.php';

use Google\Cloud\Tasks\V2beta3\AppEngineHttpQueue;
use Google\Cloud\Tasks\V2beta3\CloudTasksClient;
use Google\Cloud\Tasks\V2beta3\Queue;
use Google\Cloud\Tasks\V2beta3\Task;

<<< ...lots of cruft omitted... >>>

        $json_payload = json_encode(
            array(
                "batch" => $operation_time,
                "order" => $csvln[0],
                "customer" => $csvln[1],
                "email" => $csvln[2],
                "salesperson" => $csvln[3]
            )
        );

        //Create each of the tasks in the queue
        $options = [
            'http' => [
                'header'  => "Content-type: application/json",
                'method'  => 'POST',
                'content' => $json_payload
            ]
        ];

        $task = new Task($options);

Любая помощь будет безмерно признательна!

1 Ответ

0 голосов
/ 23 ноября 2018

Вы можете загрузить задачу в очередь задач с предварительно определенной полезной нагрузкой, используя HTTP-запрос App Engine из клиентской библиотеки PHP Cloud Tasks .

После того, как вы определили задачу, вы можете использовать методы установки, предоставленные вам AppEngineHttpRequest , чтобы создать ваш объект HTTP с любыми необходимыми заголовками. Это также позволит назначить полезную нагрузку.

Ниже приведен простой фрагмент, показывающий, как прикрепить задачу с полезной нагрузкой к очереди по умолчанию:

use Google\Cloud\Tasks\V2beta3\AppEngineHttpRequest;
use Google\Cloud\Tasks\V2beta3\HttpMethod;
use Google\Cloud\Tasks\V2beta3\Task;

//Preparing the payload
$json_payload = json_encode(
    array(
        "batch"       => date("h:i:sa"),
        "order"       => "Payload-0000",
        "customer"    => "Payload-0001",
        "email"       => "Payload-0002",
        "salesperson" => "Payload-0003"
    )
);

//Create and configure the task   
$httpR=new AppEngineHttpRequest();
$httpR->setBody($json_payload);
$httpR->setHeaders(['Content-type'=>'application/json']);
$httpR->setHttpMethod(HttpMethod::POST);   
$httpR->setRelativeUri("/example_task_handler");

$task = new Task();
$task->setAppEngineHttpRequest($httpR);

Также рассмотрите возможность обновления вашей библиотеки, поскольку текущая версия v0.86.0, что позволит назначать заголовки даже после создания объекта задачи.

...