/** * @return StartableEndpoint */ public function prepare() { $this->persistenceDefinitionApplier->apply($this->settings); $featureActivator = new FeatureActivator($this->settings); foreach ($this->settings->get(KnownSettingsEnum::FEATURE_FQCN_LIST) as $featureFqcn) { /** @var Feature $feature */ $feature = new $featureFqcn(); $feature->describe(); $featureActivator->addFeature($feature); } $featureInstaller = new FeatureInstaller($featureActivator->getFeatures()); $featureStarter = new FeatureStarter($featureActivator->getFeatures()); /** @var TransportDefinition $transportDefinition */ $transportDefinition = $this->settings->get(TransportDefinition::class); $this->settings->set(TransportInfrastructure::class, $transportDefinition->formalize($this->settings, $transportDefinition->createConnectionFactory($this->settings))); $featureActivator->activateFeatures($this->builder, $this->pipelineModifications); $featureInstaller->installFeatures($this->builder, $this->settings); $this->pipelineModifications->registerStepsInBuilder($this->builder); $featureStarter->startFeatures($this->builder, $this->busContext); $this->isPrepared = true; return $this; }
/** * @return StartableEndpoint */ public function build() { $externalContainer = $this->settings->tryGet(KnownSettingsEnum::CONTAINER); $container = new Container(); $acclimator = new ContainerAcclimator(); $adaptedExternalContainer = $externalContainer ? $acclimator->acclimate($externalContainer) : null; $builder = new Builder($container, $adaptedExternalContainer); $container[BuilderInterface::class] = $builder; $this->ensureTransportConfigured(); $this->ensureOutboxPersistenceConfigured(); $this->ensureSerializationConfigured(); $this->ensureUuidGenerationConfigured(); $this->registerKnownFeatures(); $this->settings->setDefault(KnownSettingsEnum::ENDPOINT_NAME, $this->endpointName); $this->settings->setDefault(KnownSettingsEnum::SEND_ONLY, false); $this->settings->set(QueueBindings::class, new QueueBindings()); $persistenceDefinitionApplier = new PersistenceDefinitionApplier(); $this->registerBaseContainerServices($container); return new StartableEndpoint($this->settings, $persistenceDefinitionApplier, $builder, $builder->build(PipelineModifications::class), $builder->build(BusContext::class)); }
public static function markFeatureAsInactive($featureFqcn, Settings $settings) { $settings->set($featureFqcn, FeatureStateEnum::INACTIVE); }
/** * @param BusContextInterface $busContext */ public function start(BusContextInterface $busContext) { $endpointId = $this->outboxPersister->fetchOrGenerateEndpointId($this->endpointName); $this->settings->set(Doctrine2KnownSettingsEnum::OUTBOX_ENDPOINT_ID, $endpointId); }