PHPackages                             andrey\_mireichyk/roadrunner-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Queues &amp; Workers](/categories/queues)
4. /
5. andrey\_mireichyk/roadrunner-bundle

ActiveSymfony-bundle[Queues &amp; Workers](/categories/queues)

andrey\_mireichyk/roadrunner-bundle
===================================

A RoadRunner worker as a Symfony Bundle

1.3.2(5y ago)02MITPHPPHP &gt;=7.3

Since Dec 10Pushed 5y agoCompare

[ Source](https://github.com/AndreiMireichyk/roadrunner-bundle)[ Packagist](https://packagist.org/packages/andrey_mireichyk/roadrunner-bundle)[ GitHub Sponsors](https://github.com/Baldinof)[ RSS](/packages/andrey-mireichyk-roadrunner-bundle/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (29)Versions (14)Used By (0)

Roadrunner Bundle
=================

[](#roadrunner-bundle)

[RoadRunner](https://roadrunner.dev/) is a high-performance PHP application server, load-balancer, and process manager written in Golang.

This bundle provides a RoadRunner Worker integrated in Symfony, it's easily configurable and extendable.

Installation
------------

[](#installation)

Run the following command:

```
composer require baldinof/roadrunner-bundle

```

If you don't use Symfony Flex:

- register `Baldinof\RoadRunnerBundle\BaldinofRoadRunnerBundle` in your kernel
- copy default RoadRunner configuration files: `cp vendor/baldinof/roadrunner-bundle/.rr.* .`

Usage
-----

[](#usage)

- get the RoadRunner binary: `vendor/bin/rr get --location bin/`
- run RoadRunner with `bin/rr serve`
- visit your app at

Configuration
-------------

[](#configuration)

If you want to override some parts of the bundle you can replace some definitions.

Example if you want to use a TCP socket as relay:

```
# config/services.yaml
services:
  Spiral\Goridge\RelayInterface:
    class: 'Spiral\Goridge\SocketRelay'
    arguments:
      - localhost
      - 7000
```

```
# .rr.yaml
http:
  workers:
    relay: "tcp://localhost:7000"
```

Integrations
------------

[](#integrations)

Depending on installed bundle &amp; your configuration, this bundles add some integrations:

- Sentry: configure the request context (if the [`SentryBundle`](https://github.com/getsentry/sentry-symfony) is installed)
- Sessions: add the session cookie to the PSR response (if `framework.sessions.enabled` config is `true`)
- Doctrine Mongo Bundle: call `clear()` on all opened manager after each requests (not needed for regular doctrine bundle)

Default integrations can be disabled:

```
baldinof_road_runner:
  default_integrations: false
```

Doctrine connection handler
---------------------------

[](#doctrine-connection-handler)

Due to the fact that roadrunner assumes that the process works in demonized mode, there may be problems with disconnecting the database, this problem is handled in this bundle if a doctrine is used to connect to the database.

By default, in the event of a connection failure, the process will be stopped and the request will end with a 500 http code, to prevent this and to correctly process failed connections, without erroneous answers - you need to add [symfony/proxy-manager-bridge](https://github.com/symfony/proxy-manager-bridge) to your project:

```
composer require symfony/proxy-manager-bridge

```

Sessions in database
--------------------

[](#sessions-in-database)

In accordance with the problem described above, to store sessions in the database, you should use the doctrine connection, for example, you can use the [shapecode/doctrine-session-handler-bundle](https://github.com/shapecode/doctrine-session-handler-bundle) bundle

```
composer require shapecode/doctrine-session-handler-bundle

```

Middlewares
-----------

[](#middlewares)

You can use middlewares to manipulate PSR request &amp; responses. Middlewares can implements either PSR [`MiddlewareInterface`](https://www.php-fig.org/psr/psr-15/#22-psrhttpservermiddlewareinterface)or [`Baldinof\RoadRunnerBundle\Http\IteratorMiddlewareInterface`](./src/Http/IteratorMiddlewareInterface.php).

`IteratorMiddlewareInterface` allows to do work after the response has been sent to the client, you just have to `yield` the response instead of returning it.

Example configuration:

```
baldinof_road_runner:
    middlewares:
        - App\Middleware\YourMiddleware
```

Be aware that

- middlewares are run outside of Symfony `Kernel::handle()`
- the middleware stack is always resolved at worker start (can be a performance issue if your middleware initialization takes time)

Metrics
-------

[](#metrics)

Roadrunner have ability to [collect application metrics](https://roadrunner.dev/docs/beep-beep-metrics), enable metrics with this bundle configuration:

```
# config/packages/baldinof_road_runner.yaml
baldinof_road_runner:
    metrics_enabled: true
```

And configure RoadRunner:

```
# .rr.yaml
rpc:
  enable: true
  listen: unix://var/roadrunner_rpc.sock

metrics:
  address: localhost:2112
  collect:
    app_metric_counter:
      type: counter
      help: "Application counter."
```

Simply inject `Spiral\RoadRunner\MetricsInterface` to record metrics:

```
class YouController
{
    public function index(MetricsInterface $metrics): Response
    {
        $metrics->add('app_metric_counter', 1);

        return new Response("...");
    }
}
```

> If you inject `Spiral\RoadRunner\MetricsInterface`, but metrics collection is disabled in config, a [`NullMetrics`](./src/Metric/NullMetrics.php) will be injected and nothing will be collected.

Kernel reboots
--------------

[](#kernel-reboots)

The Symfony kernel and the dependency injection container are **preserved between requests**. If an exception is thrown during the request handling, the kernel is rebooted and a fresh container is used.

The goal is to prevent services to be in a non recoverable state after an error.

To optimize your worker you can allow exceptions that does not put your app in an errored state:

```
# config/packages/baldinof_road_runner.yaml
baldinof_road_runner:
    kernel_reboot:
      strategy: on_exception
      allowed_exceptions:
        - Symfony\Component\HttpKernel\Exception\HttpExceptionInterface
        - Symfony\Component\Serializer\Exception\ExceptionInterface
        - App\Exception\YourDomainException
```

If you are seeing issues and want to use a fresh container on each request you can use the `always` reboot strategy:

```
# config/packages/baldinof_road_runner.yaml
baldinof_road_runner:
    kernel_reboot:
      strategy: always
```

> If some of your services are stateful, you can implement `Symfony\Contracts\Service\ResetInterface` and your service will be resetted on each request.

Development mode
----------------

[](#development-mode)

Copy the dev config file if it's not present: `cp vendor/baldinof/roadrunner-bundle/.rr.dev.yaml .`

Start RoadRunner with the dev config file:

```
bin/rr serve -c .rr.dev.yaml

```

Reference:

If you use the Symfony VarDumper, dumps will not be shown in the HTTP Response body. You can view dumps with `bin/console server:dump` or in the profiler.

Usage with Docker
-----------------

[](#usage-with-docker)

```
# Dockerfile
FROM php:7.4-alpine

RUN apk add --no-cache autoconf openssl-dev g++ make pcre-dev icu-dev zlib-dev libzip-dev && \
    docker-php-ext-install bcmath intl opcache zip sockets && \
    apk del --purge autoconf g++ make

WORKDIR /usr/src/app

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

COPY composer.json composer.lock ./

RUN composer install --no-dev --no-autoloader --no-scripts --no-plugins --prefer-dist --no-progress --no-interaction

RUN ./vendor/bin/rr get-binary --location /usr/local/bin

COPY . .

ENV APP_ENV=prod

RUN composer dump-autoload --optimize && \
    composer check-platform-reqs && \
    php bin/console cache:warmup

EXPOSE 8080

CMD ["rr", "serve"]
```

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity2

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 79.4% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~28 days

Recently: every ~37 days

Total

11

Last Release

2059d ago

Major Versions

0.1 → 1.0.02020-02-13

PHP version history (2 changes)0.1PHP ^7.3

1.3.0PHP &gt;=7.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/8efe53293545348581877dbdd2008ccd49b84d7dc21ad73b57b3cf242f3cbc0c?d=identicon)[AndreiMireichyk](/maintainers/AndreiMireichyk)

---

Top Contributors

[![Baldinof](https://avatars.githubusercontent.com/u/1597384?v=4)](https://github.com/Baldinof "Baldinof (50 commits)")[![vsychov](https://avatars.githubusercontent.com/u/2186303?v=4)](https://github.com/vsychov "vsychov (11 commits)")[![AndreiMireichyk](https://avatars.githubusercontent.com/u/39955122?v=4)](https://github.com/AndreiMireichyk "AndreiMireichyk (1 commits)")[![hugochinchilla](https://avatars.githubusercontent.com/u/196416?v=4)](https://github.com/hugochinchilla "hugochinchilla (1 commits)")

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/andrey-mireichyk-roadrunner-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/andrey-mireichyk-roadrunner-bundle/health.svg)](https://phpackages.com/packages/andrey-mireichyk-roadrunner-bundle)
```

###  Alternatives

[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M648](/packages/sylius-sylius)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.2M386](/packages/shopware-core)[simplesamlphp/simplesamlphp

A PHP implementation of a SAML 2.0 service provider and identity provider.

1.1k12.4M192](/packages/simplesamlphp-simplesamlphp)[drupal/core-recommended

Locked core dependencies; require this project INSTEAD OF drupal/core.

6939.5M341](/packages/drupal-core-recommended)[drupal/core

Drupal is an open source content management platform powering millions of websites and applications.

19462.3M1.3k](/packages/drupal-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
