tritran / sqs-queue-bundle
为 Symfony 的简单 SQS 队列
Requires
- php: >=7.0.0
- ext-json: *
- aws/aws-sdk-php-symfony: ~2.0
- symfony/config: ~2.8|~3.3|~4.0
- symfony/console: ~2.7|~3.3|~4.0
- symfony/dependency-injection: ~2.7|~3.3|~4.0
Requires (Dev)
- phpmd/phpmd: 2.6.*
- phpunit/phpunit: 6.0.*
- squizlabs/php_codesniffer: ^3.0
- symfony/framework-bundle: ~2.3|~3.0|~4.0
- symfony/yaml: ~2.3|~3.0|~4.0
This package is not auto-updated.
Last update: 2024-09-15 01:57:47 UTC
README
此包提供了一个简单的方法来处理 AWS SQS。
安装
按照以下 5 个简单步骤设置此包。
步骤 1: 下载包
打开命令行,进入您的项目目录,并执行以下命令以下载此包的最新稳定版本
$ composer require tritran/sqs-queue-bundle
此命令要求您全局安装了 Composer。
步骤 2: 启用包
在 app/AppKernel.php
中注册包
class AppKernel extends Kernel { public function registerBundles() { return [ // ... new \Aws\Symfony\AwsBundle(), new \TriTran\SqsQueueBundle\TriTranSqsQueueBundle(), ]; } // ... }
在默认的 Symfony 应用程序中使用 Symfony Flex 时,安装/删除包时,包会自动启用/禁用,因此您可以忽略此步骤。
步骤 3: 更新 AWS SQS 凭据
此包使用 AWS SDK for PHP。有关可用的配置选项的完整文档,请参阅 SDK 指南。
以下是以 YAML 格式提供的 AWS 凭据配置示例
# app/config/config.yml aws: version: latest region: us-central-1 credentials: key: not-a-real-key secret: "@not-a-real-secret"
步骤 4: 配置队列
以下是一些队列的 YAML 格式配置示例
# app/config/config.yml tritran_sqs_queue: sqs_queue: queues: emailpool: queue_url: 'https://sqs.eu-central-1.amazonaws.com/49504XX59872/emailpool' worker: "@acl.service.emailpool" attributes: receive_message_wait_time_seconds: 20 visibility_timeout: 30 reminder: queue_url: 'https://sqs.eu-central-1.amazonaws.com/49504XX59872/reminder' worker: 'AclBundle\Service\Worker\ReminderWorker'
有关可用的队列选项的完整文档,请参阅 队列属性。
现在,您可以通过
tritran.sqs_queue.emailpool
或tritran.sqs_queue.reminder
访问队列emailpool
或reminder
服务,它是 BaseQueue 的接口。
以下是将消息发送到指定队列的示例实现
namespace AclBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use TriTran\SqsQueueBundle\Service\Message; /** * Class DefaultController * * @package AclBundle\Controller */ class DefaultController extends Controller { public function indexAction() { // ... $data = [ 'from' => 'sender@domain.com', 'to' => 'receiver@domain.com', 'subject' => 'Greeting Message', 'body' => 'Congratulation! You have just received a message which was sent from AWS SQS Queue' ]; $this->get('tritran.sqs_queue.emailpool') ->sendMessage((new Message())->setBody(serialize($data))); // ... } }
对于 FIFO 队列,您必须将非空
MessageGroupId
与消息关联。否则,操作会失败。
您可以显式提供MessageDeduplicationId
。如果您无法提供MessageDeduplicationId
并且您为队列启用了ContentBasedDeduplication
,Amazon SQS 将使用消息正文(但不包括消息属性)生成 SHA-256 哈希来生成MessageDeduplicationId
。
有关 FIFO 队列的更多信息,请参阅 Amazon SQS FIFO (First-In-First-Out) Queues
队列行为
队列管理器行为
您可以通过服务
tritran.sqs_queue.queue_manager
访问 QueueManager。
步骤 5: 设置工作进程
以下是一个示例实现,它将监听队列以处理其中的消息。
namespace AclBundle\Service\Worker; use TriTran\SqsQueueBundle\Service\Message; use TriTran\SqsQueueBundle\Service\Worker\AbstractWorker; class ReminderWorker extends AbstractWorker { /** * @param Message $message * * @return boolean */ protected function execute(Message $message) { echo 'The message is: ' . $message->getBody(); return true; } }
然后您可以通过以下方式将其作为守护进程在控制台执行
bin/console tritran:sqs_queue:worker reminder
注意:reminder 是您在步骤 4 中的 config.yml 中配置的队列名称。
附录:有用的控制台命令
注意:请使用
-h
获取每个命令的更多信息。