function run()
 {
     $post = trim(file_get_contents('php://input'));
     if (empty($post)) {
         header('HTTP/1.1 421 No Event');
         CRM_Core_Error::debug_var("ENDPOINT EVENT", "Needs to be called by mailjet", true, true);
         return;
     }
     $httpHeader = CRM_Mailjet_Page_EndPoint::processMessage($post);
     header($httpHeader);
     CRM_Utils_System::civiExit();
 }
// index of the avg [1m,5m,15m]
const MJ_MAX_LOAD = 2;
const MJ_LOAD_CHECK_FREQ = 100;
const MJ_COOLING_PERIOD = 20;
$msg_since_check = 0;
$arguments = getopt('q:');
$queue_name = $arguments['q'];
function connect()
{
    return new AMQPStreamConnection(CIVICRM_AMQP_HOST, CIVICRM_AMQP_PORT, CIVICRM_AMQP_USER, CIVICRM_AMQP_PASSWORD, CIVICRM_AMQP_VHOST);
}
$callback = function ($msg) {
    global $msg_since_check;
    try {
        $msg_handler = new CRM_Mailjet_Page_EndPoint();
        $msg_handler->processMessage($msg->body);
        $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
    } catch (Exception $ex) {
        $msg->delivery_info['channel']->basic_nack($msg->delivery_info['delivery_tag']);
        CRM_Core_Error::debug_var("MAILJET AMQP", $ex, true, true);
    } finally {
        $msg_since_check++;
    }
};
$connection = connect();
$channel = $connection->channel();
debug('Waiting for messages. To exit press CTRL+C...');
while (true) {
    while (count($channel->callbacks)) {
        if ($msg_since_check >= MJ_LOAD_CHECK_FREQ) {
            $load = sys_getloadavg()[MJ_LOAD_INDEX];