большое количество запросов на публикацию RabbitMQ приводит к AMQPTimeoutException + большое количество состояний TCPAbortOnData / FIN_WAIT1 на принимающем кроличьем сервере - PullRequest
0 голосов
/ 25 марта 2019

Я настраиваю сервер трекера, который будет использовать rabbitmq вместо того, чтобы выполнять работу немедленно. Кажется, все работает нормально, пока к серверу кроликов не поступило больше запросов - я получаю

<!-- language: php -->
Fatal error: Uncaught PhpAmqpLib\Exception\AMQPTimeoutException: The connection timed out after 3 sec while awaiting incoming data in /var/www/html/libs/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/AMQPReader.php

ошибок на издателе, и на принимающем кроличьем сервере, по-видимому, имеется много неверных данных (TCPAbortOnData) - около 400-500 соединений с ошибочными данными. Я использую netdata для проверки здоровья. На кроличьем сервере есть эти пики:

rabbitmq admin panel shows a lot of downwards spikes

Я переместил код для использования надежных соединений с подтверждением, и это, похоже, решило спады потребителя вниз, но проблема с запросом публикации все еще сохраняется.

вот мой код публикации:


header("Cache-Control: no-cache, must-revalidate");
error_reporting(E_ALL);
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;


/* example get request, i make around 10 of these */
  if(isset($_GET['example']))          $example = 
  strtolower($_GET['example']); else $example = false;
/* example get request, i make around 10 of these */

//cleaning for gets
...
//cleaning for gets

  $array = array(
    "example" =>         $example,
    ...
  );


  $rabbit_queue_name = 'queue.something';
  $connection = new AMQPStreamConnection('xxx.xxx.xxx.xx', 5672, 'xxxx', 'xxxxxx');
  $channel = $connection->channel();  
  $channel->queue_declare($rabbit_queue_name, false, true, false, false);

  $msg = new AMQPMessage(
    json_encode($array,true),
    array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT)
  );

  $channel->basic_publish($msg, '', $rabbit_queue_name);
  $channel->close();
  $connection->close();

  header('Content-Type: application/xml; charset=utf-8');
  echo '<?xml version="1.0" encoding="utf-8"?>
            <data>
              <result>1</result>
              <value>1</value>
              <msg>OK</msg>
                </data>
        <!-- END OF XML -->';

и вот плохие данные:

netdata shows spikes in baddata/TCPAbortOnData

...