v0.6.0
No due date
52% complete
Non-Breaking Changes:
- Merged clients into one
- Marked
Client
andChannel
final
through doc block and introduced interfaces for them for unit testing - Dropped build in event loop, socket, and stream handling switching to
react/event-loop
,react/socket
, andreact/stream
for that - Partially introduced strict typing and (return) type hints due to all the change…
Non-Breaking Changes:
- Merged clients into one
- Marked
Client
andChannel
final
through doc block and introduced interfaces for them for unit testing - Dropped build in event loop, socket, and stream handling switching to
react/event-loop
,react/socket
, andreact/stream
for that - Partially introduced strict typing and (return) type hints due to all the changes in the code
- Updated certain generated traits into generated classes
- Ensured performance didn't regress with these changes
- Updated all examples, tutorials, and the benchmark. Dropping the async variants due to the merge
Breaking changes:
- Raised minimum PHP version to 8.1+ unlocking the use of fibers
- Swapped
react/promise
v2 with v3 - Dropped Event Loop injection and replaced it with the global loop accessor
<?php
-use Bunny\Async\Client;
+use Bunny\Client;
-use React\EventLoop\Factory;
require dirname(__DIR__, 2) . '/vendor/autoload.php';
-$loop = Factory::create();
-(new Client($loop))->connect();
+$client = new Client();
-$loop->run();
- Merged
Async
andSync
clients intoClient
utilizing fibers throughreact/async
Sync
receive.php
:
<?php
use Bunny\Channel;
use Bunny\Client;
use Bunny\Message;
require dirname(__DIR__, 2) . '/vendor/autoload.php';
-$client = (new Client())->connect();
+$client = new Client();
$channel = $client->channel();
$channel->queueDeclare('hello', false, false, false, false);
echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";
-$channel->run(
+$channel->consume(
function (Message $message, Channel $channel) {
echo " [x] Received ", $message->content, "\n";
},
'hello',
'',
false,
true,
);
send.php
:
<?php
use Bunny\Client;
require dirname(__DIR__, 2) . '/vendor/autoload.php';
-$client = (new Client())->connect();
+$client = new Client();
$channel = $client->channel();
$channel->queueDeclare('hello', false, false, false, false);
$channel->close();
$channel->publish('Hello World!', [], '', 'hello');
echo " [x] Sent 'Hello World!'\n";
$channel->close();
$client->disconnect();
Async
receive-async.php
:
<?php
use Bunny\Channel;
-use Bunny\Async\Client;
+use Bunny\Client;
use Bunny\Message;
-use React\EventLoop\Factory;
require dirname(__DIR__, 2) . '/vendor/autoload.php';
-$loop = Factory::create();
-(new Client($loop))->connect()
+$client = new Client();
-->then(function (Client $client) {
- return $client->channel();
-})
+$channel = $client->channel();
-->then(function (Channel $channel) {
- return $channel->queueDeclare('hello', false, false, false, false)->then(function () use ($channel) {
- return $channel;
- });
-})
+$channel->queueDeclare('hello', false, false, false, false);
-->then(function (Channel $channel) {
- echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";
- $channel->consume(
- function (Message $message, Channel $channel, Client $client) {
- echo " [x] Received ", $message->content, "\n";
- },
- 'hello',
- '',
- false,
- true
- );
-});
+echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";
+$channel->consume(
+ function (Message $message, Channel $channel) {
+ echo " [x] Received ", $message->content, "\n";
+ },
+ 'hello',
+ '',
+ false,
+ true,
+);
-$loop->run();
send-async.php
:
<?php
-use Bunny\Channel;
-use Bunny\Async\Client;
+use Bunny\Client;
-use React\EventLoop\Factory;
require dirname(__DIR__, 2) . '/vendor/autoload.php';
-$loop = Factory::create();
-(new Client($loop))->connect()
+$client = new Client();
-->then(function (Client $client) {
- return $client->channel();
-})
+$channel = $client->channel();
-->then(function (Channel $channel) {
- return $channel->queueDeclare('hello', false, false, false, false)->then(function () use ($channel) {
- return $channel;
- });
-})
+$channel->queueDeclare('hello', false, false, false, false);
-->then(function (Channel $channel) {
- echo " [x] Sending 'Hello World!'\n";
- return $channel->publish('Hello World!', [], '', 'hello')->then(function () use ($channel) {
- return $channel;
- });
-})
+$channel->publish('Hello World!', [], '', 'hello');
-->then(function (Channel $channel) {
- echo " [x] Sent 'Hello World!'\n";
- $client = $channel->getClient();
- return $channel->close()->then(function () use ($client) {
- return $client;
- });
-})
+echo " [x] Sent 'Hello World!'\n";
+$channel->close();
-->then(function (Client $client) {
- $client->disconnect();
-});
+$client->disconnect();
- Channel::queueBind arguments
string $queue
andstring $exchange
switched argument locations
<?php
use Bunny\Channel;
use Bunny\Client;
use Bunny\Message;
require dirname(__DIR__, 2) . '/vendor/autoload.php';
$client = new Client();
$channel = $client->channel();
$channel->exchangeDeclare('logs', 'fanout');
$queue = $channel->queueDeclare('', false, false, true, false);
-$channel->queueBind($queue->queue, 'logs');
+$channel->queueBind('logs', $queue->queue);