Tutoriale / Przygotowanie środowiska PHP

d6685779-c7c3-924a-7338-f219a1abf199

Zanim zaczniemy pracę z systemem RabbitMQ, warto zrozumieć, jak działa wykonywanie skryptów napisanych w języku PHP. Jak wiadomo język PHP jest językiem skryptowym, interpretowanym przez silnik Zend.

PHP może działać w kilku trybach:

  • jako moduł serwera Apache,
  • CLI, czyli za pomocą polecenia php,
  • jako FPM (FastCGI Process Manager) jako alternatywa dla FastCGI – wraz z serwerem nginx (od wersji 5.3.3),
  • jako samodzielny serwer www (od wersji 5.4).

Uruchamianie skryptów PHP z poziomu terminala

Na potrzeby tego tutoriala będziemy uruchamiać skrypty PHP w trybie CLI w postaci:

$ php skrypt.php

Skrypty PHP domyślnie nie działają w sposób bezprzerwowy – uruchamiany jest skrypt, wykonywane są określone w nim algorytmy, po czym program kończy swoje zadanie.

W przypadku pracy z RabbitMQ skrypt nadawcy będzie działał właśnie w taki sposób. Skrypt odbiorcy będzie zaś działał bez przerwy – oczekując na komunikaty w kolejce – do momentu przerwania jego pracy za pomocą kombinacji CTRL+C lub zabicia procesu.

echo "Witamy w Świecie PHP!\n";

Po zapisaniu powyższego skryptu jako witamy.php i jego uruchomieniu:

$ php witamy.php

powinniśmy zobaczyć następujący rezultat:

Witamy w Świecie PHP!

Menadżer pakietów Composer

Od kilku lat każde liczące się środowisko programowania posiada własny menadżer pakietów. W przypadku języka PHP przez długie lata taką rolę pełniły:

  • PEAR będący skrótem od "PHP Extension and Application Repository", wymawiane w języku angielskim tak jak słowo gruszka;
  • oraz PECL będący skrótem od "PHP Extension Community Library".

Opublikowanie menadżera pakietów o nazwie Composer w marcu 2012 roku zdecydowanie zmieniło sposób programowania w języku PHP, gdyż od wtedy rozpoczął się proces tworzenia kodu, który można wielokrotnie używać w różnych projektach.

Listę publicznych pakietów obsługiwanych przez można przeglądać na stronie Packagist.

Menadżer pakietów Composer przechowuje informacje o pakietach w:

  • pliku composer.json – utworzonym przez użytkownika,
  • pliku composer.lock – utworzonym dla zadanej konfiguracji po rozwiązaniu zależności pomiędzy pakietami.

Więcej na temat programu Composer znaleźć można na stronie tego projektu.

Program Composer można albo zainstalować w systemie operacyjnym:

$ sudo apt-get install composer

i uruchamiać następująco

$ composer polecenie

albo pobrać jego wersję PHAR ze strony https://getcomposer.org/download/ i uruchamiać

$ php composer.phar polecenie

Biblioteka php-amqplib

Niskopoziomowe wsparcie dla RabbitMQ i protokołu AMQP 0-8-x/0-9-x realizowane jest dzięki bibliotece php-amqplib, która znajduje się w repozytorium Packagist. Słowo niskopoziomowe zostało tutaj użyte celowo, gdyż na bibliotece php-amqplib nadbudowano wsparcie dla protokołu AMQP 0-9-x w różnych frameworkach PHP takich jak Zend Framework, Symfony czy Laravel.

Aby zainstalować bibliotekę php-amqplib w naszym projekcie należy dodać ją do pliku composer.json:

{
  "name": "rabbitmq_eu/kurs-RabbitMQ-php",
  "description": "Tutorial RabbitMQ dla środowiska PHP",
  "keywords": ["RabbitMQ", "AMQP 0-9-x", "PHP", "php-amqplib", "RattiQue"],
  "type": "project",
  "license": "BSD-3-Clause",
  "homepage" : "https://www.rabbitmq.eu/",
  "authors": [
    {
      "name": "Tomasz Kuter",
      "email": "tkuter@loculus.pl",
      "homepage": "https://tomaszkuter.com/en/"
    }
  ],
  "require": {
    "ext-bcmath": "*",
    "ext-mbstring": "*",
    "php-amqplib/php-amqplib": ">=2.7.2"
  }
}

a następnie wywołać polecenie:

$ composer install

Wszystkie zależności powinny zostać ściągnięte do katalogu vendor.

Teraz wystarczy, że na początku naszego skryptu wskażemy, by załadować ściągnięte pakiety:

require_once __DIR__ . '/vendor/autoload.php';

i możemy przejść do pracy z RabbitMQ.

Rozszerzenie php-amqp / ext-amqp

W przypadku języka PHP istnieje natywne, skompilowane rozszerzenie php-amqp, które oferuje dodatkową funkcjonalność programistom PHP podobnie jak na przykład:

  • php-json,
  • php-xml,
  • php-intl.

Dostarcza ono podstawową obsługę protokołu AMQP 0-8-x i jest zgodne z protokołem AMQP 0-9-x.

Obsługa ta realizowana jest za pomocą pięciu klas (nie wliczając klas wyjątków):

  • AMQPConnection,
  • AMQPChannel,
  • AMQPEnvelope,
  • AMQPExchange,
  • oraz AMQPQueue.

W tutorialach dla języka PHP będziemy korzystać z bardziej popularnego, choć wolniejszego rozwiązania, a mianowicie wspomnianej biblioteki php-amqplib.

Osoby zainteresowane rozszerzeniem php-amqp odsyłam do tutoriali dostarczonych przez firmę Pivotal Software Inc. dostępnych na GitHubie.

Repozytorium z kodem źródłowym

Kod programów omawianych w tym tutorialu znajduje się pod adresem:
https://github.com/RattiQue/tutorials-pl-php

Tomasz Kuter

Web Developer z ponad 8-letnim, komercyjnym doświadczeniem w tworzeniu stron i aplikacji internetowych oraz paneli administracyjnych w PHP, JavaScript, HTML i CSS.
Aktualnie zainteresowany architekturą mikroserwisów, które umożliwiają budowanie skalowalnych aplikacji internetowych.