happyr / bref-messenger-failure-strategies
确保您可以使用 Bref Symfony Messenger 失败策略
0.5.0
2024-03-13 18:15 UTC
Requires
- php: >=7.3
- bref/symfony-messenger: ^0.3 || ^0.4 || ^0.5 || ^1.0
- symfony/messenger: ^4.4 || ^5.0 || ^6.0 || ^7.0
Requires (Dev)
- phpunit/phpunit: ^8.5.31
- symfony/event-dispatcher-contracts: ^2.0
- symfony/polyfill-php80: ^1.17
- symfony/validator: ^5.0 || ^6.0 || ^7.0
README
所以你已经爱上了 Bref 并真的想使用 Symfony 的优秀 Messenger 组件。你可能也已经安装了 Bref Symfony Messenger 扩展包,它允许你在 SQS 和 SNS 等平台上发布消息。但是你还缺少一些东西... 你想要使用 Symfony Messenger 重试策略,对吧?
这就是为你准备的包!
安装
composer require happyr/bref-messenger-failure-strategies
现在你有一个名为 Happyr\BrefMessenger\SymfonyBusDriver
的类,它实现了 Bref\Symfony\Messenger\Service\BusDriver
。请随意使用这个新类来配置你的消费者。
示例
在每一个消费者中,你可以选择让 Symfony 处理失败,如文档中所述。
# config/packages/messenger.yaml framework: messenger: failure_transport: failed transports: failed: 'doctrine://default?queue_name=failed' workqueue: dsn: 'https://sqs.us-east-1.amazonaws.com/123456789/my-queue' retry_strategy: max_retries: 3 # milliseconds delay delay: 1000 multiplier: 2 max_delay: 60 services: Happyr\BrefMessenger\ExceptionLogger: autowire: true autoconfigure: true Happyr\BrefMessenger\SymfonyBusDriver: autowire: true Bref\Symfony\Messenger\Service\Sqs\SqsConsumer: arguments: - '@Happyr\BrefMessenger\SymfonyBusDriver' - '@messenger.routable_message_bus' - '@Symfony\Component\Messenger\Transport\Serialization\SerializerInterface' - 'my_sqs' # Same as transport name # ...
延迟仅在 SQS "普通队列" 上受支持。如果你使用 SNS 或 SQS FIFO,你应该直接使用失败队列。
# config/packages/messenger.yaml framework: messenger: failure_transport: failed transports: failed: 'doctrine://default?queue_name=failed' workqueue: dsn: 'sns://arn:aws:sns:us-east-1:1234567890:foobar' retry_strategy: max_retries: 0 services: # ...
确保你定期重新运行失败队列。以下配置将在每30分钟运行一次5秒的脚本。即使没有消息失败,它也会运行5秒。
# serverless.yml functions: website: # ... consumer: # ... console: handler: bin/console Timeout: 120 # in seconds layers: - ${bref:layer.php-74} - ${bref:layer.console} events: - schedule: rate: rate(30 minutes) input: cli: messenger:consume failed --time-limit=5 --limit=50