naroga/bernard-bundle

将 Bernard 集成到 Symfony2+ 应用程序中。

安装: 45

依赖者: 0

建议者: 0

安全性: 0

星星: 0

关注者: 1

分支: 34

类型:symfony-bundle

v2.0.2 2017-07-23 12:07 UTC

This package is auto-updated.

Last update: 2024-08-25 04:12:27 UTC


README

将 Bernard 优雅地集成到 Symfony 应用程序中。

Build Status

入门

一切从安装包开始。这通过向您的 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:consumebernard: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 并给它一个具有 consumerproducertype 属性。

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"