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