我已使用以下配置进行设置。
'derayah' => [
'driver' => 'rabbitmq',
'queue' => env('RABBITMQ_QUEUE', 'default'),
'connection' => PhpAmqpLib\Connection\AMQPStreamConnection::class,
'hosts' => [
[
'host' => env('RABBITMQ_HOST', '127.0.0.1'),
'port' => env('RABBITMQ_PORT', 5672),
'user' => env('RABBITMQ_USER', 'guest'),
'password' => env('RABBITMQ_PASSWORD', 'guest'),
'vhost' => env('RABBITMQ_VHOST', '/'),
],
],
'worker' => env('RABBITMQ_WORKER', 'default'),
'options' => [
'ssl_options' => [
'cafile' => env('RABBITMQ_SSL_CAFILE'),
'local_cert' => env('RABBITMQ_SSL_LOCALCERT'),
'local_key' => env('RABBITMQ_SSL_LOCALKEY'),
'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true),
'passphrase' => env('RABBITMQ_SSL_PASSPHRASE'),
],
'queue' => [
'job' => App\Listeners\Derayah::class,
],
],
],
我正在使用 Laravel Forge 创建 Deamon,命令如下
queue:work' derayah --sleep=10 --daemon --quiet --delay=10 --tries=5 --queue='B_Transaction,S_Transaction,M_Transaction'
它是一个股票市场提要,它提供有关特定人是否在经纪人上进行了某些交易的消息,并且我们将其保存在我们的系统中,它通常工作正常,但有时会因以下错误而失败
PhpAmqpLib\Exception\AMQPRuntimeException /artisan in ?
Lost connection: Broken pipe or closed connection
然后这会不断出现在日志中
PhpAmqpLib\Exception\AMQPIOException /artisan in ?
stream_socket_client(): Unable to connect to tcp://213.184.187.103:5672 (Connection refused)
我的解决方案:我需要从forge重新启动QUEUE manullay,以便在失败后再次连接
我的发现:它是一个无确认设置,我需要找到一种方法来重新启动队列/连接,因为我的队列似乎被卡住了
代理(RabbitMQ 服务器)由于某种原因关闭了连接。或者可能它重新启动并且工作线程中的连接不再有效。
避免此类问题的通常解决方案是在supervisord(http://supervisord.org/)或类似的下运行进程,以便在发生错误时自动重新启动。