Skip to content

Commit 176eb0f

Browse files
Merge branch 'formapro-forks-amqp-interop-tutorials'
2 parents e522247 + 0a54703 commit 176eb0f

14 files changed

+532
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ The following ports are available:
2121
* [Java (with IntelliJ IDEA)](./java-idea)
2222
* [PHP (with php-amqplib)](./php)
2323
* [PHP (with php-amqp)](./php-amqp)
24+
* [PHP (with queue-interop)](./php-interop)
2425
* [Perl](./perl)
2526
* [Python (with Pika)](./python)
2627
* [Ruby (with Bunny)](./ruby)

php-interop/README.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# PHP code for RabbitMQ tutorials based on AMQP interop
2+
3+
This is a [PHP tutorial](./php) port to the [queue-interop](https://github.com/queue-interop/queue-interop#amqp-interop) family
4+
of libraries.
5+
These examples will work with any interop-compatible transport such as [enqueue/amqp-ext](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp.md),
6+
[enqueue/amqp-bunny](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp_bunny.md),
7+
or [enqueue/amqp-lib](https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp_lib.md).
8+
9+
## Requirements
10+
11+
As with other ports, to run the tutorials you'd need a RabbitMQ node started on localhost with all defaults.
12+
13+
### PHP 5.5+
14+
15+
You need `PHP 5.5` and one of the amqp interop compatible transport.
16+
17+
18+
### Composer
19+
20+
Then [install Composer](https://getcomposer.org/download/) per instructions on their site.
21+
22+
### Client Library
23+
24+
Then you can, for example, install `enqueue/amqp-bunny` using [Composer](http://getcomposer.org).
25+
26+
To do that install Composer and add it to your path, then run the following command
27+
inside this project folder:
28+
29+
```bash
30+
composer require enqueue/amqp-bunny
31+
```

php-interop/emit_log.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
// composer require enqueue/amqp-bunny
4+
require_once __DIR__.'/vendor/autoload.php';
5+
6+
use Enqueue\AmqpBunny\AmqpConnectionFactory;
7+
use Interop\Amqp\AmqpTopic;
8+
9+
$config = [
10+
'host' => 'localhost',
11+
'port' => 5672,
12+
'user' => 'guest',
13+
'pass' => 'guest',
14+
];
15+
16+
$connection = new AmqpConnectionFactory($config);
17+
$context = $connection->createContext();
18+
19+
$topic = $context->createTopic('logs');
20+
$topic->setType(AmqpTopic::TYPE_FANOUT);
21+
22+
$context->declareTopic($topic);
23+
24+
$data = implode(' ', array_slice($argv, 1));
25+
if (empty($data)) {
26+
$data = 'info: Hello World!';
27+
}
28+
$message = $context->createMessage($data);
29+
30+
$context->createProducer()->send($topic, $message);
31+
32+
echo ' [x] Sent ', $data, "\n";
33+
34+
$context->close();

php-interop/emit_log_direct.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
// composer require enqueue/amqp-bunny
4+
require_once __DIR__.'/vendor/autoload.php';
5+
6+
use Enqueue\AmqpBunny\AmqpConnectionFactory;
7+
use Interop\Amqp\AmqpTopic;
8+
9+
$config = [
10+
'host' => 'localhost',
11+
'port' => 5672,
12+
'user' => 'guest',
13+
'pass' => 'guest',
14+
];
15+
16+
$connection = new AmqpConnectionFactory($config);
17+
$context = $connection->createContext();
18+
19+
$topic = $context->createTopic('direct_logs');
20+
$topic->setType(AmqpTopic::TYPE_DIRECT);
21+
22+
$context->declareTopic($topic);
23+
24+
$severity = isset($argv[1]) && !empty($argv[1]) ? $argv[1] : 'info';
25+
26+
$data = implode(' ', array_slice($argv, 2));
27+
if (empty($data)) {
28+
$data = 'Hello World!';
29+
}
30+
31+
$message = $context->createMessage($data);
32+
$message->setRoutingKey($severity);
33+
34+
$context->createProducer()->send($topic, $message);
35+
36+
echo ' [x] Sent ',$severity,':',$data," \n";
37+
38+
$context->close();

php-interop/emit_log_topic.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
// composer require enqueue/amqp-bunny
4+
require_once __DIR__.'/vendor/autoload.php';
5+
6+
use Enqueue\AmqpBunny\AmqpConnectionFactory;
7+
use Interop\Amqp\AmqpTopic;
8+
9+
$config = [
10+
'host' => 'localhost',
11+
'port' => 5672,
12+
'user' => 'guest',
13+
'pass' => 'guest',
14+
];
15+
16+
$connection = new AmqpConnectionFactory($config);
17+
$context = $connection->createContext();
18+
19+
$topic = $context->createTopic('topic_logs');
20+
$topic->setType(AmqpTopic::TYPE_TOPIC);
21+
22+
$context->declareTopic($topic);
23+
24+
$routing_key = isset($argv[1]) && !empty($argv[1]) ? $argv[1] : 'anonymous.info';
25+
26+
$data = implode(' ', array_slice($argv, 2));
27+
if (empty($data)) {
28+
$data = 'Hello World!';
29+
}
30+
31+
$message = $context->createMessage($data);
32+
$message->setRoutingKey($routing_key);
33+
34+
$context->createProducer()->send($topic, $message);
35+
36+
echo ' [x] Sent ',$routing_key,':',$data," \n";
37+
38+
$context->close();

php-interop/new_task.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
// composer require enqueue/amqp-bunny
4+
require_once __DIR__.'/vendor/autoload.php';
5+
6+
use Enqueue\AmqpBunny\AmqpConnectionFactory;
7+
use Interop\Amqp\AmqpMessage;
8+
use Interop\Amqp\AmqpQueue;
9+
10+
$config = [
11+
'host' => 'localhost',
12+
'port' => 5672,
13+
'user' => 'guest',
14+
'pass' => 'guest',
15+
];
16+
17+
$connection = new AmqpConnectionFactory($config);
18+
$context = $connection->createContext();
19+
20+
$queue = $context->createQueue('task_queue');
21+
$queue->addFlag(AmqpQueue::FLAG_DURABLE);
22+
23+
$context->declareQueue($queue);
24+
25+
$data = implode(' ', array_slice($argv, 1));
26+
if (empty($data)) {
27+
$data = 'Hello World!';
28+
}
29+
$message = $context->createMessage($data);
30+
$message->setDeliveryMode(AmqpMessage::DELIVERY_MODE_PERSISTENT);
31+
32+
$context->createProducer()->send($queue, $message);
33+
34+
echo ' [x] Sent ', $data, "\n";
35+
36+
$context->close();

php-interop/receive.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
// composer require enqueue/amqp-bunny
4+
require_once __DIR__.'/vendor/autoload.php';
5+
6+
use Enqueue\AmqpBunny\AmqpConnectionFactory;
7+
use Interop\Amqp\AmqpConsumer;
8+
9+
$config = [
10+
'host' => 'localhost',
11+
'port' => 5672,
12+
'user' => 'guest',
13+
'pass' => 'guest',
14+
'receive_method' => 'basic_consume',
15+
];
16+
17+
$connection = new AmqpConnectionFactory($config);
18+
$context = $connection->createContext();
19+
20+
$queue = $context->createQueue('hello');
21+
$context->declareQueue($queue);
22+
23+
$consumer = $context->createConsumer($queue);
24+
$consumer->addFlag(AmqpConsumer::FLAG_NOACK);
25+
26+
echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";
27+
28+
while (true) {
29+
if ($message = $consumer->receive()) {
30+
echo ' [x] Received ', $message->getBody(), "\n";
31+
}
32+
}
33+
34+
$context->close();

php-interop/receive_logs.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
// composer require enqueue/amqp-bunny
4+
require_once __DIR__.'/vendor/autoload.php';
5+
6+
use Enqueue\AmqpBunny\AmqpConnectionFactory;
7+
use Interop\Amqp\AmqpConsumer;
8+
use Interop\Amqp\AmqpTopic;
9+
use Interop\Amqp\Impl\AmqpBind;
10+
11+
$config = [
12+
'host' => 'localhost',
13+
'port' => 5672,
14+
'user' => 'guest',
15+
'pass' => 'guest',
16+
'receive_method' => 'basic_consume',
17+
];
18+
19+
$connection = new AmqpConnectionFactory($config);
20+
$context = $connection->createContext();
21+
22+
$topic = $context->createTopic('logs');
23+
$topic->setType(AmqpTopic::TYPE_FANOUT);
24+
25+
$context->declareTopic($topic);
26+
27+
$queue = $context->createTemporaryQueue();
28+
29+
$context->bind(new AmqpBind($topic, $queue));
30+
31+
$consumer = $context->createConsumer($queue);
32+
$consumer->addFlag(AmqpConsumer::FLAG_NOACK);
33+
34+
echo ' [*] Waiting for logs. To exit press CTRL+C', "\n";
35+
36+
while (true) {
37+
if ($message = $consumer->receive()) {
38+
echo ' [x] ', $message->getBody(), "\n";
39+
}
40+
}
41+
42+
$context->close();

php-interop/receive_logs_direct.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
// composer require enqueue/amqp-bunny
4+
require_once __DIR__.'/vendor/autoload.php';
5+
6+
use Enqueue\AmqpBunny\AmqpConnectionFactory;
7+
use Interop\Amqp\AmqpConsumer;
8+
use Interop\Amqp\AmqpTopic;
9+
use Interop\Amqp\Impl\AmqpBind;
10+
11+
$config = [
12+
'host' => 'localhost',
13+
'port' => 5672,
14+
'user' => 'guest',
15+
'pass' => 'guest',
16+
'receive_method' => 'basic_consume',
17+
];
18+
19+
$connection = new AmqpConnectionFactory($config);
20+
$context = $connection->createContext();
21+
22+
$topic = $context->createTopic('direct_logs');
23+
$topic->setType(AmqpTopic::TYPE_DIRECT);
24+
25+
$context->declareTopic($topic);
26+
27+
$queue = $context->createTemporaryQueue();
28+
29+
$severities = array_slice($argv, 1);
30+
if (empty($severities)) {
31+
file_put_contents('php://stderr', "Usage: $argv[0] [info] [warning] [error]\n");
32+
exit(1);
33+
}
34+
35+
foreach ($severities as $severity) {
36+
$context->bind(new AmqpBind($topic, $queue, $severity));
37+
}
38+
39+
$consumer = $context->createConsumer($queue);
40+
$consumer->addFlag(AmqpConsumer::FLAG_NOACK);
41+
42+
echo ' [*] Waiting for logs. To exit press CTRL+C', "\n";
43+
44+
while (true) {
45+
if ($message = $consumer->receive()) {
46+
echo ' [x] '.$message->getRoutingKey().':'.$message->getBody()."\n";
47+
}
48+
}
49+
50+
$context->close();

php-interop/receive_logs_topic.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
// composer require enqueue/amqp-bunny
4+
require_once __DIR__.'/vendor/autoload.php';
5+
6+
use Enqueue\AmqpBunny\AmqpConnectionFactory;
7+
use Interop\Amqp\AmqpConsumer;
8+
use Interop\Amqp\AmqpTopic;
9+
use Interop\Amqp\Impl\AmqpBind;
10+
11+
$config = [
12+
'host' => 'localhost',
13+
'port' => 5672,
14+
'user' => 'guest',
15+
'pass' => 'guest',
16+
'receive_method' => 'basic_consume',
17+
];
18+
19+
$connection = new AmqpConnectionFactory($config);
20+
$context = $connection->createContext();
21+
22+
$topic = $context->createTopic('topic_logs');
23+
$topic->setType(AmqpTopic::TYPE_TOPIC);
24+
25+
$context->declareTopic($topic);
26+
27+
$queue = $context->createTemporaryQueue();
28+
29+
$binding_keys = array_slice($argv, 1);
30+
if (empty($binding_keys)) {
31+
file_put_contents('php://stderr', "Usage: $argv[0] [binding_key]\n");
32+
exit(1);
33+
}
34+
35+
foreach ($binding_keys as $binding_key) {
36+
$context->bind(new AmqpBind($topic, $queue, $binding_key));
37+
}
38+
39+
$consumer = $context->createConsumer($queue);
40+
$consumer->addFlag(AmqpConsumer::FLAG_NOACK);
41+
42+
echo ' [*] Waiting for logs. To exit press CTRL+C', "\n";
43+
44+
while (true) {
45+
if ($message = $consumer->receive()) {
46+
echo ' [x] '.$message->getRoutingKey().':'.$message->getBody()."\n";
47+
}
48+
}
49+
50+
$context->close();

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy