Exemple #1
0
<?php

use EventLoop\EventLoop;
use Ramsey\Uuid\UuidInterface;
use Rxnet\Observer\StdOutObserver;
use Rxnet\RabbitMq\RabbitMessage;
require __DIR__ . "/../../vendor/autoload.php";
$loop = EventLoop::getLoop();
$scheduler = new \Rx\Scheduler\EventLoopScheduler($loop);
$rabbit = new \Rxnet\RabbitMq\RabbitMq('rabbit://*****:*****@127.0.0.1:5672/', new \Rxnet\Serializer\Serialize());
// Open connection (lazy way)
$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);
Exemple #2
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()));
Exemple #3
0
<?php

describe("ReactiveX Bunny client", function () {
    it("Connects to bunny", function () {
        $loop = \EventLoop\EventLoop::getLoop();
        $mq = new \Rxnet\RabbitMq\RabbitMq(['host' => '127.0.0.1', 'port' => 5672, 'user' => 'guest', 'password' => 'guest']);
        $cnx = $mq->connect()->retryWhen(function ($errors) {
            return $errors->delay(2000)->doOnNext(function () {
                echo "Disconnected, retry\n";
            });
        });
        \Rxnet\await($cnx);
        $mq->consume("test", 2)->delay(1000, new \Rx\Scheduler\EventLoopScheduler($loop))->subscribeCallback(function (\Rxnet\RabbitMq\RabbitMessage $message) {
            echo "message {$message->getData()}\n";
            $message->ack();
            //var_dump(func_get_args());
        });
        $loop->run();
    });
});
Exemple #4
0
<?php

use EventLoop\EventLoop;
use Rxnet\Observer\StdOutObserver;
use Rxnet\RabbitMq\RabbitMessage;
require __DIR__ . "/../../vendor/autoload.php";
$loop = EventLoop::getLoop();
$rabbit = new \Rxnet\RabbitMq\RabbitMq('rabbit://*****:*****@127.0.0.1:5672/', new \Rxnet\Serializer\Serialize());
// Wait for rabbit to be connected
\Rxnet\awaitOnce($rabbit->connect());
$queue = $rabbit->queue('test_queue', []);
// Will wait for message
$queue->consume()->subscribeCallback(function (RabbitMessage $message) use($debug, $rabbit) {
    echo '.';
    $data = $message->getData();
    $name = $message->getName();
    $head = $message->getLabels();
    // Do what you want but do one of this to get next
    $message->ack();
    //$message->nack();
    //$message->reject();
    //$message->rejectToBottom();
});
$loop->run();