elixis-group/google-cloud-queue-process

将 PHP 打包以扩展 google/cloud-pubsub,该组件用于在 pub / sub 及其他工具中使用发布新消息,此组件允许进一步使用 Pub / Sub 工具。

1.4.0 2024-05-29 00:00 UTC

This package is auto-updated.

Last update: 2024-09-29 13:11:06 UTC


README

gcp-queue-process 是一个用于与库 google-cloud-php-pubsub 交互的应用程序,现在该库实现了服务 google-cloud-php-tasks 以使用 GCP cloudTasks。

PubSub

此库提供了许多发布推送或拉取消息的方法。如果您使用推送或拉取方法,您有机会动态创建新的“主题”和新的“订阅”(创建订阅仅适用于拉取方法)。请参阅文档了解详细信息。

CloudTasks

gcp-queue-process 还提供了一种将消息发布到 CloudTasks 的方法。如果您正在使用 CloudTask,则在消息发布过程中可以使用此工具创建新的队列。

安装

首先,安装 PHP 的首选依赖管理器 Composer

使用 composer 安装此组件

$ composer require elixis-group/google-cloud-queue-process

发布消息示例

发布 PubSub 消息

require_once __DIR__ . '/vendor/autoload.php';

use GoogleCloudQueueProcess\Handler\PubSub\MessagePublisherHandler;
use GoogleCloudQueueProcess\Service\PubSub\PubSubService;

$messagePublisher = new MessagePublisherHandler();
$pubSubService 	  = new PubSubService();

$content      = json_encode(["blue", "green", "yellow", "red"]);
$type         = "pull"; //use value "push" to use push message
$topic        = "topic-name";
$subscription = "subsciption-name";

$messagePublisher->publishMessage( $content, $type, $topic, $subscription, $pubSubService);

发布 CloudTasks 消息

require_once __DIR__ . '/vendor/autoload.php';

use GoogleCloudQueueProcess\Handler\CloudTasks\MessagePublisherHandler;
use GoogleCloudQueueProcess\Service\CloudTasks\CloudTasksService;

$messagePublisher  = new MessagePublisherHandler();
$cloudTasksService = new CloudTasksService();

$message        = json_encode(["blue", "green", "yellow", "red"]);
$queuename      = "queuename";
$urlTaskHandler = "/task-handler-url";

$messagePublisher->publishMessage( $message, $queuename, $urlTaskHandler, $cloudTasksService);

消费消息示例

为了处理您的数据,创建一个新的类,该类继承自 Pub Sub 或 Cloud Tasks 的 MessageHandler Base 类,并包含一个名为 "processedData" 的方法。
此方法包含处理消息的代码。

namespace ACME;

use GoogleCloudQueueProcess\Handler\PubSub\MessageHandlerBase;

class ACMEMessageHandler extends MessageHandlerBase{

	public function processedData( Array $data )
	{
		//Add your script to process the message.
	}

}

消费 PubSub 消息

require_once __DIR__ . '/vendor/autoload.php';

use GoogleCloudQueueProcess\Handler\PubSub\MessageConsumerHandler;
use ACME\ACMEMessageHandler;

$messageConsumer = new MessageConsumerHandler();
$messageHandler  = new ACMEMessageHandler();

//use "tokenEmail" and "tokenAudience" define in subsciption config.

$request              = file_get_contents('php://input');
$tokenEmail           = "acme@serviceaccount.iam.gserviceaccount.com";
$tokenAudience        = "http://acme-app.com/url";
$googleCredentialPath = "acme@serviceaccount.iam.gserviceaccount.com.json";

$messageRequest  = $messageConsumer->getRequestContent($request, $tokenEmail, $tokenAudience, $googleCredentialPath);


$messageConsumer->pushConsumer($messageRequest, $messageHandler);

消费 CloudTasks 消息

require_once __DIR__ . '/vendor/autoload.php';

use GoogleCloudQueueProcess\Handler\CloudTasks\MessageConsumerHandler;
use ACME\ACMEMessageHandler;

$messageConsumer = new MessageConsumerHandler();
$messageHandler  = new ACMEMessageHandler();

$request = file_get_contents('php://input');

$messageRequest  = $messageConsumer->getRequestContent($request);

$messageConsumer->pushConsumer($messageRequest, $messageHandler);

贡献

如果您在推送修改之前为此项目做出贡献,请勿忘记执行 php-cs-fixer、phpunit 和 php-stan,以修复错误和代码结构。

在执行测试之前,请转到 GCP 控制台并创建名为 "test-push-topic" 的主题和类型为 "push" 的订阅 "test-push-subscription"。这是执行以下单元测试所必需的。
完成测试配置后,将您的 GOOGLE-PROJECT-ID 添加到 phpunit.xml。

$ vendor/bin/phpunit tests

$ vendor/bin/php-cs-fixer fix --config .php-cs-fixer.php

$ vendor/bin/phpstan analyse src && vendor/bin/phpstan analyse tests