Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Enqueue Symfony’s Process Components with PHP and ZeroMQ

DZone's Guide to

Enqueue Symfony’s Process Components with PHP and ZeroMQ

· Integration Zone
Free Resource

Share, secure, distribute, control, and monetize your APIs with the platform built with performance, time-to-value, and growth in mind. Free 90 day trial 3Scale by Red Hat

Today I’d like to play with ZeroMQ. ZeroMQ is a great tool to work with sockets. I will show you the problem that I want to solve: One web application needs to execute background processes but I need to execute those processes in order. Two users cannot execute one process at the same time. OK, if we face this problem we can use Gearman. I’ve written various posts about Gearman ( here and here for example). But today I want to play with ZeroMQ.

I’m going to use one great library called React. With react (reactor pattern implementation in PHP) we can do various thing. One of them are ZeroMQ bindings.

In this simple example we are going to build a simple server and client. The client will send to the server one string that the server will enqueue and executes using the Symfony’s Process component.

Here is the client:

<?php
include __DIR__ . '/../vendor/autoload.php';
 
use Zmqlifo\Client;
 
$queue = Client::factory('tcp://127.0.0.1:4444');
echo $queue->run("ls -latr")->getOutput();
echo $queue->run("pwd")->getOutput();

And finally the server:

<?php
include __DIR__ . '/../vendor/autoload.php';
 
use Symfony\Component\Process\Process;
use Zmqlifo\Server;
 
$server = Server::factory('tcp://127.0.0.1:4444');
$server->registerOnMessageCallback(function ($msg) {
    $process = new Process($msg);
    $process->setTimeout(3600);
    $process->run();
    return $process->getOutput();
});
 
$server->run();

You can see the working example here:

you can check the full code of the library in github and Packagist.

Discover how you can achielve enterpriese agility with microservices and API management

Topics:

Published at DZone with permission of Gonzalo Ayuso, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}