<?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()));
$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();
<?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);