PHP Classes

File: example/src/Workers/LancaFoguete.php

Recommend this page to a friend!
  Classes of Matheusz Maydana   Docker Compose Auto Scaling Service   example/src/Workers/LancaFoguete.php   Download  
File: example/src/Workers/LancaFoguete.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Docker Compose Auto Scaling Service
Manage the deployment of services using Docker
Author: By
Last change:
Date: 20 days ago
Size: 2,013 bytes
 

Contents

Class file image Download
#!/usr/bin/php
<?php

declare(strict_types=1);

namespace
App\Workers;

$pathVendor = __DIR__ . '/../../vendor/autoload.php';
if(!
is_file($pathVendor)) {
    echo
"O arquivo {$pathVendor} não foi encontrado. Execute o comando composer install para instalar as dependências.";
    exit;
}

require_once
$pathVendor;

use
Exception;
use
PhpAmqpLib\Connection\AMQPStreamConnection;



$host = 'rabbitmq-master';
$port = 5672;
$user = 'guest';
$pass = 'guest';
$vhost = '/';

$connection = new AMQPStreamConnection($host, $port, $user, $pass, $vhost);
$channel = $connection->channel();

// Nome da fila
$queueName = 'lancar_foguete';

// Declaração da fila
$channel->queue_declare($queueName, false, true, false, false);

echo
"Fila '$queueName' criada com sucesso.\n";




$callback = function($message)
{

    echo
date('m/d/Y h:i:s a', time()) . " [x] Novo Foguete para lançar: ", $message->body, "\n";
    echo
"------------------------------------------------------------\n";

    try {

       
sleep(2); // Simulando lançamento do foguete (2 segundos)
       
echo date('m/d/Y h:i:s a', time()) . " [x] Foguete lançado com sucesso!\n";
       
$message->getChannel()->basic_ack($message->getDeliveryTag());

    }catch (
Exception $e) {
        echo
"Erro ao lançar o foguete: {$e->getMessage()}\n";
       
$message->getChannel()->basic_nack($message->getDeliveryTag(), false, false);
    }
};

try {

    echo
date('m/d/Y H:i:s a', time()) . " [x] Aguardando novas Foguetes para lançar!\n";


   
$channel->basic_qos(
       
prefetch_size: null,
       
prefetch_count: 1, // Quantidade de mensagens que o consumidor pode receber por vez até que ele envie um ack
       
a_global: null
   
);

   
// Consumindo mensagens da fila
   
$channel->basic_consume($queueName, '', false, false, false, false, $callback);

    while (
$channel->is_consuming()) {
       
$channel->wait();
    }

   
$channel->close();
   
$connection->close();

} catch (
Exception $e) {

    echo
"{$e->getMessage()}\n";
}