ndthuan/aws-sqs-wrapper

简化SQS队列消息处理的库

v1.1.0 2018-11-25 10:23 UTC

This package is auto-updated.

Last update: 2024-09-27 02:04:10 UTC


README

PHP库,用于简化SQS队列消息处理。

Build Status

简介

  • 此库将发送/接收/删除SQS消息的结果转换为对象。这样,您可以在不记住常见属性名称的情况下利用代码自动完成功能。
  • 它通过引入简化的发送/接收/删除方法来删除您的样板代码。
  • 它解耦了发布和订阅的责任,使得您的业务逻辑不受基础设施感知的约束。

安装

composer require ndthuan/aws-sqs-wrapper

用法

发送消息

use Aws\Sqs\SqsClient;
use Ndthuan\AwsSqsWrapper\Publishing\Publisher;
use Ndthuan\AwsSqsWrapper\Queue\Connector;

$queueUrl = ''; // get this from your own AWS SQS setup

// creating a publisher
$sqsClient = new SqsClient(...);
$queueConnector = new Connector($sqsClient, $queueUrl);
$publisher = new Publisher($queueConnector);

// send a string message
$publisher->publishString('My message body');
// or send a json serializable object/array
$myMessage = [
    'my' => 'data',
];
$publisher->publishJsonSerializable($myMessage);

订阅队列

use Aws\Sqs\SqsClient;
use Ndthuan\AwsSqsWrapper\Queue\Connector;
use Ndthuan\AwsSqsWrapper\Queue\ReceivedMessage;
use Ndthuan\AwsSqsWrapper\Queue\ResultMetadata;
use Ndthuan\AwsSqsWrapper\Subscribing\DelegatorSubscriber;

// defining a message processor
class MyMessageProcessor implements MessageProcessorInterface
{
    /**
     * @inheritdoc
     */
    public function processMessage(ReceivedMessage $message, ResultMetadata $resultMetadata)
    {
        // your processing logic
    }
}

$queueUrl = ''; // get this from your own AWS SQS setup

// creating a subscriber
$sqsClient = new SqsClient(...);
$queueConnector = new Connector($sqsClient, $queueUrl);
$subscriber = new DelegatorSubscriber(new MyMessageProcessor(), $queueConnector);

// run the subscriber
$subscriber->pullAndProcessMessages();

异常处理

消息处理器可能抛出异常或错误。订阅者将根据异常类型的不同而做出不同的反应

  • LogicExceptionValidationFailureException上:对应的消息将从队列中删除,并且订阅者继续处理其他消息。
  • FatalException上:对应的消息不会从队列中删除,但订阅者将停止处理并将异常向上传递。
  • 在其他的\Throwable类型上:对应的消息不会从队列中删除,并且订阅者继续处理其他消息。