PHPackages                             novactive/ezaccelerator - 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. novactive/ezaccelerator

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

novactive/ezaccelerator
=======================

Novactive eZ Accelerator is an eZ Platform bundle for performance optimizations.

v1.0.0-beta1(5y ago)302MITPHPPHP ^7.3

Since Jul 20Pushed 3mo ago11 watchersCompare

[ Source](https://github.com/Novactive/NovaeZAccelerator)[ Packagist](https://packagist.org/packages/novactive/ezaccelerator)[ Docs](https://github.com/Novactive/NovaeZAccelerator)[ GitHub Sponsors](https://github.com/plopix)[ RSS](/packages/novactive-ezaccelerator/feed)WikiDiscussions master Synced 5d ago

READMEChangelogDependencies (7)Versions (5)Used By (0)

Novactive eZ Accelerator
========================

[](#novactive-ez-accelerator)

---

This repository is what we call a "subtree split": a read-only copy of one directory of the main repository. It is used by Composer to allow developers to depend on specific bundles.

If you want to report or contribute, you should instead open your issue on the main repository:

Documentation is available in this repository via `.md` files but also packaged here:

---

[![Downloads](https://camo.githubusercontent.com/5af33ea56cb6eac4958076457d256c3c4e3d80e8b5272e55a1dc10a4c0700bc0/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6e6f766163746976652f657a616363656c657261746f722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/novactive/ezaccelerator)[![Latest version](https://camo.githubusercontent.com/5ee5501b09584627780052fecec1a179b2e2e5b869a86ba2c672718699654d21/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f4e6f766163746976652f4e6f7661655a416363656c657261746f722e7376673f7374796c653d666c61742d737175617265)](https://github.com/Novactive/NovaeZAccelerator/releases)[![License](https://camo.githubusercontent.com/ca7d1f83436bbb87e12c3eab0ff22413e8d8d37cf303a73e426cdbaf7a190749/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6e6f766163746976652f657a616363656c657261746f722e7376673f7374796c653d666c61742d737175617265)](LICENSE)

Accelerate your Ibexa DXP (eZ Platform)

This bundles helps and aims to accelerate:

- the overhall performances
- your developments
- productivity of your marketing/content creation teams
- your business

eZ Accelerator leverages Symfony Messenger and adds asynchronoucity to eZ Platform allowing many things with NO OVERHEAD and quite the opposite accelerating native actions.

For now, eZ Accelerator allows you to:

- catch and dispatch asynchronously **any Events**. (*Careful though not all can be handle asynchronously*)
- handle HTTP Cache Purge asynchronously
- handle Search Indexation asynchronously

> Bonus! You can inject Middleware into the game!

How does that work
------------------

[](#how-does-that-work)

First you need to understand the [Symony Messenger Component](https://symfony.com/doc/current/components/messenger.html).

### Asynchronous HTTP Cache Purge

[](#asynchronous-http-cache-purge)

eZ Accelerator decorates the eZ Platform purger to dispatch the corresponding messages. To enable the asynchronicity, you just need to know the Message FQDN

- **Tag Purge**: Novactive\\Bundle\\eZAccelerator\\Message\\PurgeHttpCacheTags
- **Purge All**: Novactive\\Bundle\\eZAccelerator\\Message\\PurgeAllHttpCache

> that's it! See the config example below

### Asynchronous Search Index

[](#asynchronous-search-index)

eZ Accelerator decorates the eZ Platform Search Handler to dispatch the corresponding messages. To enable the asynchronicity, you just need to know the Message FQDN

- **Index Content**: Novactive\\Bundle\\eZAccelerator\\Message\\Search\\IndexContent
- **Index Location**: Novactive\\Bundle\\eZAccelerator\\Message\\Search\\IndexLocation
- **Remove Content**: Novactive\\Bundle\\eZAccelerator\\Message\\Search\\UnindexContent
- **Remove Location**: Novactive\\Bundle\\eZAccelerator\\Message\\Search\\UnindexLocation
- **Purge All**: Novactive\\Bundle\\eZAccelerator\\Message\\Search\\PurgeIndex

> that's it! See the config example below

### Asynchronous Event handling

[](#asynchronous-event-handling)

The concept is simple, everytime eZ Platform is doing something an event is triggered. eZ Accelerator gives you the opportunity to handle the event through a bus which gives you the opportunity to handle that event via a message synchronously or asynchronicity using the transport of your choice.

Everything is opt-in, you can still use the default event dispatcher or you can switch to the bus approach.

Configuration example
---------------------

[](#configuration-example)

### Handle the Event: eZ\\Publish\\API\\Repository\\Events\\Bookmark\\CreateBookmarkEvent through a bus SYNCHRONOUSLY

[](#handle-the-event-ezpublishapirepositoryeventsbookmarkcreatebookmarkevent-through-a-bus-synchronously)

```
nova_ezaccelerator:
    system:
        default:
            # default_bus: a.default.bus.for.this.siteaccess.config
            event_to_message:
                eZ\Publish\API\Repository\Events\Bookmark\CreateBookmarkEvent:
                    message: Novactive\Bundle\eZAccelerator\Message\VoidEventMessage # should be your own
                    # stop_propagation: false # default
                    # bus: a.specific.bus.for.this.siteaccess.config.and.that.event
```

> You can decide to stop the event propagation as well if it makes sense.

### Transport Configuration

[](#transport-configuration)

```
framework:
    messenger:
        buses:
            my.bus: # could be anything and you can have many
                middleware:
                    - Novactive\Bundle\eZAccelerator\Core\SiteAccessAwareMiddleware

        transports:
            ezaccelerator: 'doctrine://default?queue_name=nova_ezaccelerator' # you decide the name does not matter

        routing:
            Novactive\Bundle\eZAccelerator\Message\VoidEventMessage: ezaccelerator
            Novactive\Bundle\eZAccelerator\Message\HTTPCache\PurgeAllHttpCache: ezaccelerator
            Novactive\Bundle\eZAccelerator\Message\HTTPCache\PurgeHttpCacheTags: ezaccelerator
            Novactive\Bundle\eZAccelerator\Message\Search\IndexContent: ezaccelerator
            Novactive\Bundle\eZAccelerator\Message\Search\IndexLocation: ezaccelerator
            Novactive\Bundle\eZAccelerator\Message\Search\UnindexContent: ezaccelerator
            Novactive\Bundle\eZAccelerator\Message\Search\UnindexLocation: ezaccelerator
            Novactive\Bundle\eZAccelerator\Message\Search\PurgeIndex: ezaccelerator
```

With this configuration you can handle **asynchronously** whatever you want when you want.

> Again, careful when all the AfterEvent can probably all be handle asynchronously the main work has to be synchronous for most of the case. (Ex: Content Creation, etc.)

Considerations
--------------

[](#considerations)

### Consumers and SiteAccesses in complex MultiSiteAccess situation

[](#consumers-and-siteaccesses-in-complex-multisiteaccess-situation)

When running the consumers, you will probably run them via **1** siteaccess (`default` maybe).

Thing is you might want to know the original SiteAccess. That's why eZ Accelerator injects the `SiteAccessAwareMiddleware`which tags the Message with the Orginal SiteAccess.

Nevertheless, and even more importantly, in your handler you need to handle according to the correct configuration.

Let's imagine a situation where you have 2 siteaccess:

- **A**: where the Varnish server is `V.IP.A` and database `DB.A` (default)
- **B**: where the Varnish server is `V.IP.B` and database `DB.B`

When you run your consumer, it will use `default` siteaccess which is setup for Varnish host `V.IP.A`A message from the siteaccess `B` is dispatched, it will be handle by the only consumer you ran connected in-memory to siteaccess `A`Therefore in this situation `V.IP.B` won't never be purged.

To handle those situations you can run and setup different consumers and transports and play with eZ Accelerator / Messsenger config.

Ex:

- All default `config bin/console messenger:consume`
- SiteAccess `A` `bin/console messenger:consume --siteaccess=A`

But you can also specify the `bus` and the `receiver`

- `bin/console messenger:consume ezaccelerator --siteaccess=A --bus=something`

Features
--------

[](#features)

[Implemented](documentation/FEATURES.md)

Installation instructions
-------------------------

[](#installation-instructions)

[Installation](documentation/INSTALL.md)

Changelog
---------

[](#changelog)

[Changelog](documentation/CHANGELOG.md)

###  Health Score

29

—

LowBetter than 59% of packages

Maintenance55

Moderate activity, may be stable

Popularity5

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% 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

Unknown

Total

1

Last Release

2124d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/246ac802ccaf4e1b674e1b0200673c56fafb89ef9130a6f7d2e2d9e5b9f71a03?d=identicon)[Plopix](/maintainers/Plopix)

---

Top Contributors

[![Plopix](https://avatars.githubusercontent.com/u/313532?v=4)](https://github.com/Plopix "Plopix (16 commits)")

---

Tags

asyncdxpezplatformsymfonysymfony-bundleasynchronousperformancequeuebusnovactiveezplatform

###  Code Quality

TestsPHPUnit

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/novactive-ezaccelerator/health.svg)

```
[![Health](https://phpackages.com/badges/novactive-ezaccelerator/health.svg)](https://phpackages.com/packages/novactive-ezaccelerator)
```

###  Alternatives

[koco/messenger-kafka

Symfony Messenger Kafka Transport

931.1M1](/packages/koco-messenger-kafka)[orisai/scheduler

Cron job scheduler - with locks, parallelism and more

4037.1k4](/packages/orisai-scheduler)[fghazaleh/multi-thread-manager

Multi-thread manager using Symfony process component

172.6k](/packages/fghazaleh-multi-thread-manager)

PHPackages © 2026

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