Example #1
0
<?php

use EventLoop\EventLoop;
use Rx\Scheduler\EventLoopScheduler;
use Rxnet\Event\Event;
use Rxnet\Observer\StdOutObserver;
use Rxnet\RabbitMq\RabbitExchange;
use Rxnet\RabbitMq\RabbitMessage;
use Rxnet\RabbitMq\RabbitQueue;
use Rxnet\Routing\RoutableSubject;
require __DIR__ . "/../../vendor/autoload.php";
$loop = EventLoop::getLoop();
$scheduler = new EventLoopScheduler($loop);
$rabbit = new \Rxnet\RabbitMq\RabbitMq('rabbit://*****:*****@127.0.0.1:5672/', new \Rxnet\Serializer\Serialize());
// Wait for rabbit to be connected before starting
\Rxnet\awaitOnce($rabbit->connect());
$queue = $rabbit->queue('test_queue', 'amq.direct', []);
$exchange = $rabbit->exchange('amq.direct');
$debug = new StdOutObserver();
// Consume with a specified id
$queue->consume('consumer-2')->subscribeCallback(function (RabbitMessage $subject) use($debug) {
    // Everything that append will be to my logger
    $subject->subscribe($debug);
    // Give 30s to handle the subject or reject it to bottom (with all its changes)
    $subject->timeout(30 * 1000)->subscribeCallback(null, function ($e) use($subject) {
        echo "#";
        $subject->rejectToBottom();
    }, function () use($subject) {
        echo ".";
        $subject->ack();
    }, new EventLoopScheduler(EventLoop::getLoop()));
Example #2
0
$channel = \Rxnet\awaitOnce($rabbit->connect());
$exchange = $rabbit->exchange('amq.direct', [], $channel);
// Every .2s
\Rx\Observable::interval(200)->take(10000)->map(function () {
    return \Ramsey\Uuid\Uuid::uuid4();
})->flatMap(function (UuidInterface $id) use($exchange) {
    return $exchange->produce($id, '/routing/key')->map(function () use($id) {
        return "{$id}\n";
    });
})->subscribe(new StdOutObserver(), $scheduler);
// Open a new channel (lazy way)
$channel = \Rxnet\awaitOnce($rabbit->channel());
$queue = $rabbit->queue('test_queue', [], $channel);
// Say we want to prefetch 1 message at a time
$queue->setQos(1);
// Start one consumer
$queue->consume("Consumer-1")->subscribeCallback(function (RabbitMessage $message) use($scheduler) {
    echo "- consumer 1 consumed : {$message->getData()}\n";
    // Wait 1s to ack
    $scheduler->schedule([$message, 'ack'], 1000);
}, null, null, $scheduler);
// Many consumers can live together
$channel = \Rxnet\awaitOnce($rabbit->channel());
$queue = $rabbit->queue('test_queue', [], $channel);
$queue->setQos(1);
$queue->consume("Consumer-2")->subscribeCallback(function (RabbitMessage $message) use($scheduler) {
    echo "- consumer 2 consumed : {$message->getData()}\n";
    // Wait 0.5s to ack
    $scheduler->schedule([$message, 'ack'], 500);
}, null, null, $scheduler);
$loop->run();
Example #3
0
<?php

use EventLoop\EventLoop;
use Rxnet\Httpd\HttpdRequest;
use Rxnet\Httpd\HttpdResponse;
use Rxnet\Observer\StdOutObserver;
use Rxnet\RabbitMq\RabbitMessage;
require __DIR__ . "/../../vendor/autoload.php";
$loop = EventLoop::getLoop();
$dns = new \Rxnet\Dns\Dns();
$a = \Rxnet\awaitOnce($dns->resolve("localhost"));
var_dump($a);
$a = \Rxnet\awaitOnce($dns->resolve("test.fr"));
var_dump($a);
$a = \Rxnet\awaitOnce($dns->a("test.fr"));
var_dump($a);
$a = \Rxnet\awaitOnce($dns->soa("test.fr", '8.8.4.4'));
var_dump($a);