Laravel和多个SQS(队列)配置

ege*_*ter 11 amazon-sqs laravel laravel-4

Queue类上是否有一个方法可以指定队列配置中定义的特定连接?MySql有一个类似的选项,你可以在其中定义'mysql2',然后调用:

DB::connection('mysql2')->table('etc')->get();
Run Code Online (Sandbox Code Playgroud)

队列有类似的选择吗?

就像是:

Queue::connection('sqs2')->push('MyQueue', array('message' => $message));
Run Code Online (Sandbox Code Playgroud)

ege*_*ter 14

显然我在没有意识到的情况下回答了我自己的问题.您可以拥有多个队列,并使用连接方法指定要将消息推送到哪个队列.

对于任何感兴趣的人来说,这是我的部分配置的样子:

    'default' => 'sqs',

   'connections' => array(

    'sync' => array(
        'driver' => 'sync',
    ),

    'beanstalkd' => array(
        'driver' => 'beanstalkd',
        'host'   => 'localhost',
        'queue'  => 'default',
    ),

    'sqs' => array(
        'driver' => 'sqs',
        'key'    => 'xxxxxxxxxxxx',
        'secret' => 'yyyyyyyyyyyyyy',
        'queue'  => 'https://sqs.us-west-2.amazonaws.com/zzzzzzzzz',
        'region' => 'us-west-2',
    ),

    'sqs2' => array(
        'driver' => 'sqs',
        'key'    => 'uuuuuuuuuuuuu',
        'secret' => 'vvvvvvvvvvvvvvvv',
        'queue'  => 'https://sqs.us-west-2.amazonaws.com/wwwwwwwwwww',
        'region' => 'us-west-2',
    ),
Run Code Online (Sandbox Code Playgroud)

  • 为了清楚起见,我必须补充一点,在这种情况下你必须以"php artisan queue:work sqs2`"开头,而不是"php artisan queue:work --queue = sqs2`.我花了一些时间才意识到. (7认同)

Lu3*_*u32 5

您只配置一个到 SQS 的连接,然后与 redis 或数据库等其他驱动程序不同,如果您想以不同的队列名称发送作业,则该队列应该先前存在,在亚马逊控制台或使用 SDK/api 创建它,然后在像这样调度作业时传递它:

dispatch(new MyJob)->onConnection('sqs')->onQueue('https://sqs.us-east-1.amazonaws.com/{account_id}/{queue_name}');
Run Code Online (Sandbox Code Playgroud)

这样你只配置了一个连接,并且在那个连接中有多个队列

对于像 egekhter 响应中那样处理 Job 的最后一步,

php artisan queue:work sqs --queue='https://sqs.us-east-1.amazonaws.com/{account_id}/{queue_name}'
Run Code Online (Sandbox Code Playgroud)

您还可以配置多个连接,但似乎没有必要,因为它们都在同一个帐户和凭据中,而且这似乎是同一 conexion 中多个队列的完美用例。