Laravel使用RabbitMQ的方法示例
导语
RabbitMQ想必大家都有了解,不做多介绍来。这里实现的是用RabbitMQ作为Larvel队列的驱动,替代Redis。下面以Laradock中安装示例。
安装
- 切换到 laradock目录,将 .env中关于 INSTALL_AMQP的值修改为 true
- docker-composestopworkspacephp-fpmphp-worker
- docker-composebuildworkspacephp-fpmphp-workerrabbitmq
- docker-composeup-dworkspacephp-fpmphp-workerrabbitmq
扩展包安装以及配置
- 进入到 workspace容器中,在项目目录安装扩展包 composerrequirevladimir-yuldashev/laravel-queue-rabbitmq
- 接下来在 config/queue.php文件中 connections添加 rabbitmq配置,根据情况自行修改
'rabbitmq'=>[ 'driver'=>'rabbitmq', /* *Setto"horizon"ifyouwishtouseLaravelHorizon. */ 'worker'=>env('RABBITMQ_WORKER','default'), 'dsn'=>env('RABBITMQ_DSN',null), /* *Couldbeoneaclassthatimplements\Interop\Amqp\AmqpConnectionFactoryforexample: *-\EnqueueAmqpExt\AmqpConnectionFactoryifyouinstallenqueue/amqp-ext *-\EnqueueAmqpLib\AmqpConnectionFactoryifyouinstallenqueue/amqp-lib *-\EnqueueAmqpBunny\AmqpConnectionFactoryifyouinstallenqueue/amqp-bunny */ 'factory_class'=>Enqueue\AmqpLib\AmqpConnectionFactory::class, 'host'=>env('RABBITMQ_HOST','127.0.0.1'), 'port'=>env('RABBITMQ_PORT',5672), 'vhost'=>env('RABBITMQ_VHOST','/'), 'login'=>env('RABBITMQ_LOGIN','guest'), 'password'=>env('RABBITMQ_PASSWORD','guest'), 'queue'=>env('RABBITMQ_QUEUE','default'), 'options'=>[ 'exchange'=>[ 'name'=>env('RABBITMQ_EXCHANGE_NAME'), /* *Determineifexchangeshouldbecreatedifitdoesnotexist. */ 'declare'=>env('RABBITMQ_EXCHANGE_DECLARE',true), /* *Readmoreaboutpossiblevaluesathttps://www.rabbitmq.com/tutorials/amqp-concepts.html */ 'type'=>env('RABBITMQ_EXCHANGE_TYPE',\Interop\Amqp\AmqpTopic::TYPE_DIRECT), 'passive'=>env('RABBITMQ_EXCHANGE_PASSIVE',false), 'durable'=>env('RABBITMQ_EXCHANGE_DURABLE',true), 'auto_delete'=>env('RABBITMQ_EXCHANGE_AUTODELETE',false), 'arguments'=>env('RABBITMQ_EXCHANGE_ARGUMENTS'), ], 'queue'=>[ /* *Determineifqueueshouldbecreatedifitdoesnotexist. */ 'declare'=>env('RABBITMQ_QUEUE_DECLARE',true), /* *Determineifqueueshouldbebindedtotheexchangecreated. */ 'bind'=>env('RABBITMQ_QUEUE_DECLARE_BIND',true), /* *Readmoreaboutpossiblevaluesathttps://www.rabbitmq.com/tutorials/amqp-concepts.html */ 'passive'=>env('RABBITMQ_QUEUE_PASSIVE',false), 'durable'=>env('RABBITMQ_QUEUE_DURABLE',true), 'exclusive'=>env('RABBITMQ_QUEUE_EXCLUSIVE',false), 'auto_delete'=>env('RABBITMQ_QUEUE_AUTODELETE',false), 'arguments'=>env('RABBITMQ_QUEUE_ARGUMENTS'), ], ], /* *Determinethenumberofsecondstosleepifthere'sanerrorcommunicatingwithrabbitmq *Ifsettofalse,it'llthrowanexceptionratherthandoingthesleepforXseconds. */ 'sleep_on_error'=>env('RABBITMQ_ERROR_SLEEP',5), /* *OptionalSSLparamsifanSSLconnectionisused *UsinganSSLconnectionwillalsorequiretoconfigureyourRabbitMQtoenableSSL.Moredetailscanbefoundshere:https://www.rabbitmq.com/ssl.html */ 'ssl_params'=>[ 'ssl_on'=>env('RABBITMQ_SSL',false), 'cafile'=>env('RABBITMQ_SSL_CAFILE',null), 'local_cert'=>env('RABBITMQ_SSL_LOCALCERT',null), 'local_key'=>env('RABBITMQ_SSL_LOCALKEY',null), 'verify_peer'=>env('RABBITMQ_SSL_VERIFY_PEER',true), 'passphrase'=>env('RABBITMQ_SSL_PASSPHRASE',null), ], ],
在 .env中修改 QUEUE_CONNECTION为 rabbitmq,并添加以下值
RABBITMQ_WORKER=horizon RABBITMQ_HOST=rabbitmq RABBITMQ_PORT=5672 RABBITMQ_LOGIN=guest RABBITMQ_PASSWORD=guest RABBITMQ_QUEUE=default
有两个值说明一下,因为是在Laradock中,所以 RABBITMQ_HOST设置为 rabbitmq;如果之前使用了LaravelHorizon,那么 RABBITMQ_WORKER的设置为 horizon就可以了。
参考资料:laravel-queue-rabbitmq
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。