Оказывается, после исправления многочисленных ошибок мы начали сравнивать то, что уходит от их брокера, с тем, что поступает в нашу базу данных. Мы заметили, что некоторые пакеты просто не доходят ни в озеро данных (необработанное сообщение), ни в обрабатываемую базу данных. Поэтому мы добавили больше журналов и начали расследование. Я заметил повторяющиеся ошибки «Ошибка очереди: сломанный канал или закрытое соединение». Но в то же время, когда мы видим эту ошибку и заходим в базу данных, пакеты все равно приходят, поэтому потребитель не вылетает и не перестает получать пакеты, теряя тот. Мы установили для no_ack значение true, потому что мы используем потребителя в расписании Laravel, работая с cron 8x ежедневно. А установка no_ack значения false вызовет состояние гонки для пакета, который в конечном итоге выдаст ошибку.
Я хотел бы знать, какой контекст лучше всего подходит для потребителя? Должен ли он запускаться в супервизоре с политиками автоматического перезапуска и работать на 100 % в фоновом режиме?
Код: Выделить всё
$schedule->command('pad:cron')->weekdays()->daily();
$schedule->command('x:consumir')->cron('00 04 * * *');
$schedule->command('x:consumir')->cron('00 07 * * *');
$schedule->command('x:consumir')->cron('00 10 * * *');
$schedule->command('x:consumir')->cron('01 12 * * *');
$schedule->command('x:consumir')->cron('0 15 * * *');
$schedule->command('x:consumir')->cron('0 17 * * *');
$schedule->command('x:consumir')->cron('00 20 * * *');
$schedule->command('x:consumir')->cron('00 00 * * *');
Код: Выделить всё
1195277 0.0 0.0 7124 3200 ? S 00:00 0:00 sh -c '/usr/bin/php' 'artisan' x:consumir > '/dev/null' 2>&1
1195278 0.5 0.4 277348 66736 ? S 00:00 3:56 /usr/bin/php artisan x:consumir
1199299 0.0 0.0 7124 3328 ? S 04:00 0:00 sh -c '/usr/bin/php' 'artisan' x:consumir > '/dev/null' 2>&1
1199300 0.7 0.4 277352 67100 ? S 04:00 3:38 /usr/bin/php artisan x:consumir
1203839 0.0 0.0 7124 3328 ? S 10:00 0:00 sh -c '/usr/bin/php' 'artisan' x:consumir > '/dev/null' 2>&1
1203840 1.2 0.4 277360 66964 ? S 10:00 1:45 /usr/bin/php artisan x:consumir
1310719 0.0 0.0 7124 3328 ? S 12:01 0:00 sh -c '/usr/bin/php' 'artisan' x:consumir > '/dev/null' 2>&1
1310720 0.9 0.4 277360 64436 ? S 12:01 0:11 /usr/bin/php artisan x:consumir
1332376 0.0 0.0 6436 2432 pts/1 S+ 12:21 0:00 grep --color=auto x:consumir
Код: Выделить всё
/**
* Execute the console command.
*
* @return mixed
*/
public function handle(){
try{
$connection = new AMQPStreamConnection('xxx.xxx.xxx', xxxx, env('user_rabbit'), env('password_rabbit'),'/', env('parameter1_rabbit'), 'AMQPLAIN', null, 'en_US', 3.0, 30.0, null, false, 60, 0);
$channel = $connection->channel();
echo " [*] Waiting for messages. To exit press CTRL+C\n";
$callback = function ($msg) {
$retorno = json_decode($msg->body);
//dd($retorno);
$this->processar($retorno);
};
$channel->basic_consume(env('user_rabbit'), '', false, true, false, false, $callback);
//consumer_tag =
//no_local=
//no_ack = this is true
//exclusive =
//nowait =
while ($channel->is_consuming()) {
$channel->wait();
}
$channel->close();
//$connection->close();
return true;
}catch(Throwable $e){
Log::debug('QUEUE ERROR: ' . $e->getMessage());
Log::debug($e->getTrace());
return true;
//dd("parar2");
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... hp-laravel
Мобильная версия