Forma Pro is a full stack development company which interests also spread to open source development. Being a team of strong professionals we сonsider important to contribute to tech community.

Symfony Async Commands

The upcoming Enqueue release will contain a feature that allows to run Symfony commands asynchronously. You can use it right now, just make sure the package is in place and you have EnqueueBundle properly configured plus one of supported MQ transports installed. The package could be used…


Enqueue. Multi-queue consumption improvements.

Up till now, Enqueue consumption performance from multiple queues within one process has been poor. QueueConsumer used round robin algorithm to fetch messages from queues in combination with the blocking receive method.


An efficient way to treat MongoDB in Symfony.

MongoDB is a document database with the scalability and flexibility that you want with the querying and indexing that you need. In addition, it is exceptionally developer friendly. No hassle with table creation, column definitions, data types. The…


Queue Interop roadmap.

The Queue Interop project started in the summer of 2016, almost two years ago. Since then It has been well-tried by many developers. A lot of companies use it in production.

It is time to settle a date of a stable release and possibly some intermediate steps…


Retry an erratic test.

In Enqueue project we do functional testing to make sure MQ transports work as expected. For that we need real brokers, such as Amazon SQS or Kafka. Sometimes tests fail not because of the bug at our side but because of the way a broker works.


RabbitMQ tutorials based on AMQP interop.

Everybody who uses AMQP in PHP must be aware of php-amqplib. It is very popular and in addition, it is used on RabbitMQ offsite in its tutorials. These tutorials cover the basics of creating messaging applications using RabbitMQ.


RabbitMQ delayed messaging.

RabbitMQ does not support delayed messaging from out of the box. However, at the end of the “RabbitMQ redelivery pitfalls” post, we presented code snippets that do delaying either by using a mix of ttl and dead letter exchanges or by using the delay plugin.


Spool Swiftmailer emails to real message queue.

Swiftmailer is one of the most popular mailer library in PHP world. In general the library works pretty good though there is a case that could be improved and it is: email queueing. The email queuing come in handy in such situations:


The how and why of the migration from RabbitMqBundle to EnqueueBundle.

This post describes steps you need to perform to migrate from OldSoundRabbitMqBundle (“the old sound”) to EnqueueBundle (“the enqueue”). This will be a smooth transition without breaking changes at all. Even…


Symfony Async EventDispatcher

It is a short story to bring you up to speed with what we’ve done recently on Enqueue project. The async event dispatcher feature has been merged.

As you might already guess, it allows you to dispatch events asynchronously. An event is converted to a…


Message bus to every PHP application

With the rise of microservices, it becomes crucial to connect applications properly and a Message Bus EIP helps here a lot.

It is a pattern that enables separate applications to work together, but in a decoupled fashion such that…

LiipImagineBundle. Process images in background

The Getting Started with RabbitMQ in Symfony post was about image processing in Symfony though it was a bit theoretical and did not shed a light on how to actually process images. In this post I’ll show you how to process images in background in…


Getting Started with RabbitMQ message queue in PHP

RabbitMQ is the message broker. We can use that to schedule background tasks or send events asynchronously. There are good writeups on the benefits it gives to you: Top 10 Uses For A Message Queue, Main features and benefits of message…


An automated deployment.

The main purpose of the article is to show that there is alternative approach to Capistrano and its Capifony. Instead of doing everything on a production server we can put everything to a box and deploy it. So let’s get started.