From bd3bb67949d366fde8609f17fc7a2f9b7aa7f18d Mon Sep 17 00:00:00 2001
From: Alejandro Celaya <alejandro@alejandrocelaya.com>
Date: Sat, 11 Dec 2021 17:07:40 +0100
Subject: [PATCH] Added dependencies and config to integrate with Rabbit MQ

---
 composer.json                         |  2 +-
 config/autoload/rabbit.global.php     | 49 +++++++++++++++++++++++++++
 config/autoload/rabbit.local.php.dist | 13 +++++++
 data/infra/php.Dockerfile             |  3 ++
 data/infra/swoole.Dockerfile          |  3 ++
 5 files changed, 69 insertions(+), 1 deletion(-)
 create mode 100644 config/autoload/rabbit.global.php
 create mode 100644 config/autoload/rabbit.local.php.dist

diff --git a/composer.json b/composer.json
index f7da28f9..2cfe4e14 100644
--- a/composer.json
+++ b/composer.json
@@ -42,7 +42,7 @@
         "nikolaposa/monolog-factory": "^3.1",
         "ocramius/proxy-manager": "^2.11",
         "pagerfanta/core": "^3.5",
-        "php-amqplib/php-amqplib": "^2.0",
+        "php-amqplib/php-amqplib": "^3.1",
         "php-middleware/request-id": "^4.1",
         "predis/predis": "^1.1",
         "pugx/shortid-php": "^1.0",
diff --git a/config/autoload/rabbit.global.php b/config/autoload/rabbit.global.php
new file mode 100644
index 00000000..113a0048
--- /dev/null
+++ b/config/autoload/rabbit.global.php
@@ -0,0 +1,49 @@
+<?php
+
+declare(strict_types=1);
+
+use Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory;
+use Laminas\ServiceManager\Proxy\LazyServiceFactory;
+use PhpAmqpLib\Connection\AMQPStreamConnection;
+
+use function Shlinkio\Shlink\Common\env;
+
+return [
+
+    'rabbit' => [
+        'host' => env('RABBITMQ_HOST'),
+        'port' => env('RABBITMQ_PORT', '5672'),
+        'user' => env('RABBITMQ_USER'),
+        'password' => env('RABBITMQ_PASSWORD'),
+        'vhost' => env('RABBITMQ_VHOST', '/'),
+        'exchange' => env('RABBITMQ_EXCHANGE', 'shlink-exchange'),
+        'queue' => env('RABBITMQ_QUEUE', 'shlink-queue'),
+    ],
+
+    'dependencies' => [
+        'factories' => [
+            AMQPStreamConnection::class => ConfigAbstractFactory::class,
+        ],
+        'delegators' => [
+            AMQPStreamConnection::class => [
+                LazyServiceFactory::class,
+            ],
+        ],
+        'lazy_services' => [
+            'class_map' => [
+                AMQPStreamConnection::class => AMQPStreamConnection::class,
+            ],
+        ],
+    ],
+
+    ConfigAbstractFactory::class => [
+        AMQPStreamConnection::class => [
+            'config.rabbit.host',
+            'config.rabbit.port',
+            'config.rabbit.user',
+            'config.rabbit.password',
+            'config.rabbit.vhost',
+        ],
+    ],
+
+];
diff --git a/config/autoload/rabbit.local.php.dist b/config/autoload/rabbit.local.php.dist
new file mode 100644
index 00000000..2425a2c5
--- /dev/null
+++ b/config/autoload/rabbit.local.php.dist
@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+return [
+
+    'rabbit' => [
+        'host' => 'shlink_rabbitmq',
+        'user' => 'rabbit',
+        'password' => 'rabbit',
+    ],
+
+];
diff --git a/data/infra/php.Dockerfile b/data/infra/php.Dockerfile
index 86f95361..96556869 100644
--- a/data/infra/php.Dockerfile
+++ b/data/infra/php.Dockerfile
@@ -34,6 +34,9 @@ RUN docker-php-ext-install pdo_pgsql
 RUN apk add --no-cache gmp-dev
 RUN docker-php-ext-install gmp
 
+RUN docker-php-ext-install sockets
+RUN docker-php-ext-install bcmath
+
 # Install APCu extension
 ADD https://pecl.php.net/get/apcu-$APCU_VERSION.tgz /tmp/apcu.tar.gz
 RUN mkdir -p /usr/src/php/ext/apcu \
diff --git a/data/infra/swoole.Dockerfile b/data/infra/swoole.Dockerfile
index 74b83d07..570ca2a9 100644
--- a/data/infra/swoole.Dockerfile
+++ b/data/infra/swoole.Dockerfile
@@ -36,6 +36,9 @@ RUN docker-php-ext-install pdo_pgsql
 RUN apk add --no-cache gmp-dev
 RUN docker-php-ext-install gmp
 
+RUN docker-php-ext-install sockets
+RUN docker-php-ext-install bcmath
+
 # Install APCu extension
 ADD https://pecl.php.net/get/apcu-$APCU_VERSION.tgz /tmp/apcu.tar.gz
 RUN mkdir -p /usr/src/php/ext/apcu \