naroga / bernard-bundle
将 Bernard 集成到 Symfony2+ 应用程序中。
Requires
- php: ^5.6|^7.0
- bernard/bernard: 1.0.*@dev
- symfony/framework-bundle: ^2.7|^3.0
Requires (Dev)
- phpunit/phpunit: ^5.5|^6.0
- symfony/console: ^2.7|^3.0
- symfony/finder: ^2.7|^3.0
This package is auto-updated.
Last update: 2024-08-25 04:12:27 UTC
README
将 Bernard 优雅地集成到 Symfony 应用程序中。
入门
一切从安装包开始。这通过向您的 composer.json
文件中添加以下行并运行 composer update bernard/bernard-bundle
来完成。
{ "require" : { "bernard/bernard-bundle" : "~1.0" } }
接下来是将包添加到您的内核中,并在 config.yml
中进行配置。
// app/AppKernel.php // .. previous class definition public function registerBundles() { // .. all the other bundles you have registered. $bundles[] = new Bernard\BernardBundle\BernardBernardBundle(); // .. the rest of the method }
# .. previous content of app/config/config.yml bernard_bernard: driver: file # you can choose predis, phpredis, file, doctrine, sqs etc. serializer: simple # this is the default and it is optional. Other values are symfony or jms
太好了!您现在可以使用这个小程序了。请阅读bernardphp.com上的其余文档bernardphp.com。
运行消费者
如果不知道如何运行消费者,消息队列有什么用?幸运的是,这个包自动将命令注册到您的应用程序中。因此,如果您运行 php app/console
,应该会看到 bernard:consume
和 bernard:produce
。它们的工作方式与文档中描述的相同,但如果您不确定,请在运行命令时添加 --help
。
在长时间运行消费者时,使用 --no-debug
很重要。这是因为 Symfony 默认情况下在调试模式下收集大量信息和日志,如果省略这些,您迟早会遇到内存问题。
添加接收者
为了知道消息需要去哪里,您必须注册一些接收者。这通过在服务定义中使用标签来完成。
my_receiver: class: Acme\Receiver tags: - { name: bernard.receiver, message: SendNewsletter } - { name: bernard.receiver, message: ImportUsers }
正如示例所示,可以将相同的接收者注册为许多不同的消息类型。
配置中间件
默认情况下,三个核心中间件已注册到消费者中,只需启用即可。此示例显示启用所有这些。但请记住,这些只为消费者启用。
bernard_bernard: middlewares: error_log: true logger: true # only for versions of symfony that implements PSR-3 failures: true
这很好,但您能自己编写代码吗?幸运的是,这已经通过一个用于容器的标签和一个编译器传递来处理。当您定义服务时,只需将中间件工厂服务标记为 bernard.middleware
并给它一个具有 consumer
或 producer
的 type
属性。
my_middleware_factory: class: Acme\AwesomeMiddlewareFactory tags: - { name: bernard.middleware, type: consumer } - { name: bernard.middleware, type: producer }
正如示例所示,可以注册用于消费者和生产者的中间件工厂。
配置选项
可以设置不同的选项来改变各种驱动程序的行为。
Doctrine
当使用 Doctrine 驱动程序时,在 Bernard 中使用单独的连接可能很有用。要更改它,请使用 connection
选项。如果默认连接不是 default
,则需要设置此选项。
doctrine: dbal: connections: bernard: host: "%database_host%" charset: UTF8 bernard_bernard: driver: doctrine options: connection: bernard # default is the default value
FlatFile
文件驱动程序需要知道它应该使用哪个目录来存储消息及其队列元数据。
bernard_bernard: driver: file options: directory: %kernel.cache_dir%/bernard
上面的示例会将您的消息转储到缓存文件夹中。在大多数情况下,您会想将其更改为其他位置,因为每次清除缓存时都会删除缓存文件夹(很明显)。
PhpRedis
PhpRedis 依赖于名为 snc_redis.bernard
的服务,其中配置了 Redis
实例。如果您想使用不同的名称,请使用 phpredis_service
选项。
bernard_bernard: driver: phpredis options: phpredis_service: my_redis_service
如果您正在使用 SncRedisBundle,则必须将 bernhard 客户端的日志设置为 false,以确保它是 Redis
实例而不是包装。
IronMQ
当使用 IronMQ 驱动程序时,您必须配置一个 IronMQ
连接实例。您可以像以下这样配置它:
services: ironmq_connection: class: IronMQ arguments: - { token: %ironmq_token%, project_id: %ironmq_project_id% } public: false bernard_bernard: driver: ironmq options: ironmq_service: ironmq_connection
Amazon SQS
要使用 Amazon SQS,请像这样配置您的驱动程序:
bernard_bernard: driver: sqs options: queue_map: # optional for aliasing queue urls, e.g.: send_newsletter: https://sqs.eu-west-1.amazonaws.com/... prefetch: 1 # optional, but beware the default is >1 and you may run into invisibility timeout problems with that sqs: region: "your aws region" # e.g. "eu-west-1" key: "your aws user's key" secret: "your aws user's secret"