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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。