private function eventBus(ContainerBuilder $container, $user)
    {
        $busId = 'bengor.user.simple_bus_' . $user . '_event_bus';
        $middlewareTag = 'bengor_user_' . $user . '_event_bus_middleware';
        $subscriberTag = 'bengor_user_' . $user . '_event_subscriber';

        // Define the event bus for the given user type
        // The middleware tag string will be later used to add
        // required middleware to this specific event bus
        $container->setDefinition(
            $busId,
            (new Definition(
                MessageBusSupportingMiddleware::class
            ))->addTag('message_bus', [
                'type'           => 'event',
                'middleware_tag' => $middlewareTag,
            ])->setPublic(false)
        );

        // Find services tagged with $middlewareTag string and add
        // them to the current user type's event bus
        (new ConfigureMiddlewares($busId, $middlewareTag))->process($container);

        // Declares callable resolver for the current user type's event bus
        $container->setDefinition(
            'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.callable_resolver',
            (new Definition(
                ServiceLocatorAwareCallableResolver::class, [
                    [
                        new Reference('service_container'), 'get',
                    ],
                ]
            ))->setPublic(false)
        );

        // Declares class based event name resolver for the current user type's event bus
        $container->setDefinition(
            'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.class_based_event_name_resolver',
            (new Definition(
                ClassBasedNameResolver::class
            ))->setPublic(false)
        );

        // Declares the event subscribers collection for the current user type's event bus,
        // will contain the association between events an subscribers
        $container->setDefinition(
            'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.event_subscribers_collection',
            (new Definition(
                CallableCollection::class, [
                    [],
                    $container->getDefinition(
                        'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.callable_resolver'
                    ),
                ]
            ))->setPublic(false)
        );

        // Declares the subscriber resolver with the NameResolver
        // strategy and SubscriberCollection key values for Event => Subscriber
        $container->setDefinition(
            'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.event_subscribers_resolver',
            (new Definition(
                NameBasedMessageSubscriberResolver::class, [
                    $container->getDefinition(
                        'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.class_based_event_name_resolver'
                    ),
                    $container->getDefinition(
                        'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.event_subscribers_collection'
                    ),
                ]
            ))->setPublic(false)
        );

        // Declares the Subscriber
        $container
            ->findDefinition(
                'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.delegates_to_message_handler_middleware'
            )
            ->addArgument(
                $container->getDefinition(
                    'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.event_subscribers_resolver'
                )
            )->setPublic(false);

        // Declares the tag that will be used to associate the
        // subscribers to the current user type's event bus
        (new RegisterSubscribers(
            'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.event_subscribers_collection',
            $subscriberTag,
            'subscribes_to'
        ))->process($container);

        // Decorate SimpleBus' event bus with BenGorUser's event bus
        $container->setDefinition(
            'bengor_user.' . $user . '.event_bus',
            new Definition(
                SimpleBusUserEventBus::class, [
                    $container->getDefinition($busId),
                ]
            )
        );

        // All about aggregate recorded message
        $container->setDefinition(
            'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.aggregates_recorded_messages',
            new Definition(
                AggregatesRecordedMessages::class, [
                    [],
                ]
            )
        )->setPublic(false);
        $container
            ->findDefinition(
                'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.handles_recorded_messages_middleware'
            )
            ->setArguments([
                $container->getDefinition(
                    'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.aggregates_recorded_messages'
                ),
                $container->getDefinition($busId),
            ])->setPublic(false);
        (new RegisterMessageRecorders(
            'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.aggregates_recorded_messages',
            'event_recorder'
        ))->process($container);

        CompilerPassUtil::prependBeforeOptimizationPass(
            $container,
            new AddMiddlewareTags(
                'bengor_user.simple_bus_bridge_bundle.' . $user . '_event_bus.handles_recorded_messages_middleware',
                ['command'],
                200
            )
        );
    }