52 lines
1.1 KiB
PHP
52 lines
1.1 KiB
PHP
<?php
|
|
|
|
require_once __DIR__ . '/vendor/autoload.php';
|
|
use PhpAmqpLib\Connection\AMQPStreamConnection;
|
|
use PhpAmqpLib\Message\AMQPMessage;
|
|
|
|
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
|
|
$channel = $connection->channel();
|
|
|
|
$channel->queue_declare('rpc_queue', false, false, false, false);
|
|
|
|
function fib($n)
|
|
{
|
|
if ($n == 0) {
|
|
return 0;
|
|
}
|
|
if ($n == 1) {
|
|
return 1;
|
|
}
|
|
return fib($n-1) + fib($n-2);
|
|
}
|
|
|
|
echo " [x] Awaiting RPC requests\n";
|
|
$callback = function ($req) {
|
|
$n = intval($req->getBody());
|
|
echo ' [.] fib(', $n, ")\n";
|
|
|
|
$msg = new AMQPMessage(
|
|
(string) fib($n),
|
|
array('correlation_id' => $req->get('correlation_id'))
|
|
);
|
|
|
|
$req->getChannel()->basic_publish(
|
|
$msg,
|
|
'',
|
|
$req->get('reply_to')
|
|
);
|
|
$req->ack();
|
|
};
|
|
|
|
$channel->basic_qos(null, 1, false);
|
|
$channel->basic_consume('rpc_queue', '', false, false, false, false, $callback);
|
|
|
|
try {
|
|
$channel->consume();
|
|
} catch (\Throwable $exception) {
|
|
echo $exception->getMessage();
|
|
}
|
|
|
|
$channel->close();
|
|
$connection->close();
|