elixis-group / google-cloud-queue-process
将 PHP 打包以扩展 google/cloud-pubsub,该组件用于在 pub / sub 及其他工具中使用发布新消息,此组件允许进一步使用 Pub / Sub 工具。
Requires
- google/apiclient: ^2.10
- google/cloud-pubsub: ^1.32
- google/cloud-tasks: ^1.9
- symfony/dotenv: ^4.4|^5.4|^6.4
- symfony/http-foundation: ^4.4|^5.4|^6.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^0.12.94
- phpunit/phpunit: ^8
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