/**
  * Method is called if all defined conditions are met and the feature is marked as enabled.
  * Use this method to configure and initialize all required components for the feature like
  * the steps in the pipeline or the instances/factories in the container.
  *
  * @param Settings              $settings
  * @param BuilderInterface      $builder
  * @param PipelineModifications $pipelineModifications
  */
 public function setup(Settings $settings, BuilderInterface $builder, PipelineModifications $pipelineModifications)
 {
     $pipelineModifications->registerStep('OutgoingPhysicalToDispatchConnector', OutgoingPhysicalToDispatchConnector::class, function () use($builder) {
         return new OutgoingPhysicalToDispatchConnector($builder->build(OutgoingContextFactory::class), $builder->build(DateTimeConverter::class), $builder->build(ClockInterface::class));
     });
     $pipelineModifications->registerStep('ImmediateDispatchTerminator', ImmediateDispatchTerminator::class, function () use($builder) {
         return new ImmediateDispatchTerminator($builder->build(MessageDispatcherInterface::class));
     });
 }
 /**
  * Method is called if all defined conditions are met and the feature is marked as enabled.
  * Use this method to configure and initialize all required components for the feature like
  * the steps in the pipeline or the instances/factories in the container.
  *
  * @param Settings              $settings
  * @param BuilderInterface      $builder
  * @param PipelineModifications $pipelineModifications
  */
 public function setup(Settings $settings, BuilderInterface $builder, PipelineModifications $pipelineModifications)
 {
     $maxRetries = $this->getMaxRetries($settings);
     $builder->defineSingleton(FirstLevelRetryStorage::class, new FirstLevelRetryStorage());
     $builder->defineSingleton(FirstLevelRetryPolicy::class, new FirstLevelRetryPolicy($maxRetries));
     $pipelineModifications->registerStep('FirstLevelRetryPipelineStep', FirstLevelRetryPipelineStep::class, function () use($builder) {
         return new FirstLevelRetryPipelineStep($builder->build(FirstLevelRetryStorage::class), $builder->build(FirstLevelRetryPolicy::class));
     });
 }
 /**
  * Method is called if all defined conditions are met and the feature is marked as enabled.
  * Use this method to configure and initialize all required components for the feature like
  * the steps in the pipeline or the instances/factories in the container.
  *
  * @param Settings              $settings
  * @param BuilderInterface      $builder
  * @param PipelineModifications $pipelineModifications
  */
 public function setup(Settings $settings, BuilderInterface $builder, PipelineModifications $pipelineModifications)
 {
     $pipelineModifications->registerStep('OutgoingLogicalMessageMutation', OutgoingLogicalMessageMutationPipelineStep::class, function () use($builder) {
         return new OutgoingLogicalMessageMutationPipelineStep($builder->build(MessageMutatorRegistry::class));
     });
     $pipelineModifications->registerStep('OutgoingPhysicalMessageMutation', OutgoingPhysicalMessageMutationPipelineStep::class, function () use($builder) {
         return new OutgoingPhysicalMessageMutationPipelineStep($builder->build(MessageMutatorRegistry::class));
     });
 }
 /**
  * Method is called if all defined conditions are met and the feature is marked as enabled.
  * Use this method to configure and initialize all required components for the feature like
  * the steps in the pipeline or the instances/factories in the container.
  *
  * @param Settings              $settings
  * @param BuilderInterface      $builder
  * @param PipelineModifications $pipelineModifications
  */
 public function setup(Settings $settings, BuilderInterface $builder, PipelineModifications $pipelineModifications)
 {
     $pipelineModifications->registerStep('LoadHandlersConnector', LoadHandlersConnector::class, function () use($builder) {
         return new LoadHandlersConnector($builder->build(MessageHandlerRegistry::class), $builder->build(IncomingContextFactory::class));
     });
     $pipelineModifications->registerStep('InvokeHandlerTerminator', InvokeHandlerTerminator::class, function () use($builder) {
         return new InvokeHandlerTerminator();
     });
 }
Example #5
0
 /**
  * Method is called if all defined conditions are met and the feature is marked as enabled.
  * Use this method to configure and initialize all required components for the feature like
  * the steps in the pipeline or the instances/factories in the container.
  *
  * @param Settings              $settings
  * @param BuilderInterface      $builder
  * @param PipelineModifications $pipelineModifications
  */
 public function setup(Settings $settings, BuilderInterface $builder, PipelineModifications $pipelineModifications)
 {
     $supportedStorageTypes = $settings->get(KnownSettingsEnum::SUPPORTED_STORAGE_TYPE_VALUES);
     if (!in_array(StorageType::OUTBOX, $supportedStorageTypes)) {
         throw new UnexpectedValueException("Selected persistence doesn't have support for outbox storage. " . "Please select another storage or disable the outbox feature using endpointConfigurator.disableFeature.");
     }
     $pipelineModifications->registerStep('OutboxConnector', OutboxConnector::class, function () use($builder) {
         /** @var PipelineFactory $pipelineFactory */
         $pipelineFactory = $builder->build(PipelineFactory::class);
         return new OutboxConnector($pipelineFactory->createStartingWith(DispatchContext::class, $builder->build(PipelineModifications::class)), $builder->build(OutboxStorageInterface::class), $builder->build(IncomingContextFactory::class), $builder->build(OutgoingContextFactory::class), new TransportOperationsConverter(new OutboxTransportOperationFactory()));
     });
 }
Example #6
0
 /**
  * Method is called if all defined conditions are met and the feature is marked as enabled.
  * Use this method to configure and initialize all required components for the feature like
  * the steps in the pipeline or the instances/factories in the container.
  *
  * @param Settings              $settings
  * @param BuilderInterface      $builder
  * @param PipelineModifications $pipelineModifications
  */
 public function setup(Settings $settings, BuilderInterface $builder, PipelineModifications $pipelineModifications)
 {
     $localAddress = $settings->get(KnownSettingsEnum::LOCAL_ADDRESS);
     $builder->defineSingleton(UnicastRouterInterface::class, function () use($localAddress, $builder, $settings) {
         return new UnicastRouter($localAddress, $builder->build(UnicastRoutingTable::class), $settings->get(TransportInfrastructure::class));
     });
     $pipelineModifications->registerStep('UnicastSendRoutingConnector', UnicastSendRoutingConnector::class, function () use($builder) {
         return new UnicastSendRoutingConnector($builder->build(UnicastRouterInterface::class), $builder->build(OutgoingContextFactory::class));
     });
     $pipelineModifications->registerStep('UnicastReplyRoutingConnector', UnicastReplyRoutingConnector::class, function () use($builder) {
         return new UnicastReplyRoutingConnector($builder->build(OutgoingContextFactory::class));
     });
     $pipelineModifications->registerStep('MulticastPublishRoutingConnector', MulticastPublishRoutingConnector::class, function () use($builder) {
         return new MulticastPublishRoutingConnector($builder->build(OutgoingContextFactory::class));
     });
     $canReceive = !$settings->get(KnownSettingsEnum::SEND_ONLY);
     if ($canReceive) {
         $pipelineModifications->registerStep('AttachReplyToAddressPipelineStep', AttachReplyToAddressPipelineStep::class, function () use($localAddress) {
             return new AttachReplyToAddressPipelineStep($localAddress);
         });
         /** @var TransportInfrastructure $transportInfrastructure */
         $transportInfrastructure = $settings->get(TransportInfrastructure::class);
         $subscriptionManagerFactory = $transportInfrastructure->configureSubscriptionInfrastructure();
         $builder->defineSingleton(SubscriptionManagerInterface::class, $subscriptionManagerFactory->getSubscriptionManagerFactory());
         $pipelineModifications->registerStep('SubscribeTerminator', SubscribeTerminator::class, function () use($builder) {
             return new SubscribeTerminator($builder->build(SubscriptionManagerInterface::class));
         });
         $pipelineModifications->registerStep('UnsubscribeTerminator', UnsubscribeTerminator::class, function () use($builder) {
             return new UnsubscribeTerminator($builder->build(SubscriptionManagerInterface::class));
         });
     }
 }
 /**
  * Method is called if all defined conditions are met and the feature is marked as enabled.
  * Use this method to configure and initialize all required components for the feature like
  * the steps in the pipeline or the instances/factories in the container.
  *
  * @param Settings              $settings
  * @param BuilderInterface      $builder
  * @param PipelineModifications $pipelineModifications
  */
 public function setup(Settings $settings, BuilderInterface $builder, PipelineModifications $pipelineModifications)
 {
     /** @var SerializationDefinition $definition */
     $definition = $settings->get(SerializationDefinition::class);
     $serializerFactory = $definition->formalize($settings);
     $builder->defineSingleton(MessageSerializerInterface::class, $serializerFactory);
     $builder->defineSingleton(MessageDeserializerResolver::class, function () use($builder) {
         $serializer = $builder->build(MessageSerializerInterface::class);
         return new MessageDeserializerResolver([$serializer], get_class($serializer));
     });
     $builder->defineSingleton(IncomingLogicalMessageFactory::class, new IncomingLogicalMessageFactory());
     $pipelineModifications->registerStep('DeserializeLogicalMessageConnector', DeserializeLogicalMessageConnector::class, function () use($builder) {
         return new DeserializeLogicalMessageConnector($builder->build(MessageDeserializerResolver::class), $builder->build(IncomingLogicalMessageFactory::class), $builder->build(IncomingContextFactory::class));
     });
     $pipelineModifications->registerStep('SerializeMessageConnector', SerializeMessageConnector::class, function () use($builder) {
         return new SerializeMessageConnector($builder->build(MessageSerializerInterface::class), $builder->build(OutgoingContextFactory::class));
     });
 }
 /**
  * Method is called if all defined conditions are met and the feature is marked as enabled.
  * Use this method to configure and initialize all required components for the feature like
  * the steps in the pipeline or the instances/factories in the container.
  *
  * @param Settings              $settings
  * @param BuilderInterface      $builder
  * @param PipelineModifications $pipelineModifications
  */
 public function setup(Settings $settings, BuilderInterface $builder, PipelineModifications $pipelineModifications)
 {
     $errorQueue = $settings->get(KnownSettingsEnum::ERROR_QUEUE);
     /** @var QueueBindings $queueBindings */
     $queueBindings = $settings->get(QueueBindings::class);
     $queueBindings->bindSending($errorQueue);
     $localAddress = $settings->get(KnownSettingsEnum::LOCAL_ADDRESS);
     $builder->defineSingleton(ExceptionToHeadersConverter::class, function () use($builder) {
         return new ExceptionToHeadersConverter($builder->build(ClockInterface::class), $builder->build(DateTimeConverter::class));
     });
     $registration = $pipelineModifications->registerStep('MoveErrorsToErrorQueuePipelineStep', MoveErrorsToErrorQueuePipelineStep::class, function () use($errorQueue, $localAddress, $builder) {
         /** @var PipelineFactory $pipelineFactory */
         $pipelineFactory = $builder->build(PipelineFactory::class);
         return new MoveErrorsToErrorQueuePipelineStep($errorQueue, $localAddress, $pipelineFactory->createStartingWith(DispatchContext::class, $builder->build(PipelineModifications::class)), $builder->build(ExceptionToHeadersConverter::class), $builder->build(OutgoingContextFactory::class));
     });
     $registration->insertBeforeIfExists('FirstLevelRetryPipelineStep');
     $registration->insertBeforeIfExists('SecondLevelRetryPipelineStep');
 }
Example #9
0
 /**
  * @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;
 }
 /**
  * @param string        $stepId
  * @param string        $stepFqcn
  * @param callable|null $factory
  * @param string|null   $description
  *
  * @return Pipeline\StepRegistration
  */
 public function registerPipelineStep($stepId, $stepFqcn, callable $factory = null, $description = null)
 {
     return $this->pipelineModifications->registerStep($stepId, $stepFqcn, $factory, $description);
 }
 /**
  * Method is called if all defined conditions are met and the feature is marked as enabled.
  * Use this method to configure and initialize all required components for the feature like
  * the steps in the pipeline or the instances/factories in the container.
  *
  * @param Settings              $settings
  * @param BuilderInterface      $builder
  * @param PipelineModifications $pipelineModifications
  */
 public function setup(Settings $settings, BuilderInterface $builder, PipelineModifications $pipelineModifications)
 {
     $pipelineModifications->registerStep('AttachCorrelationIdPipelineStep', AttachCorrelationIdPipelineStep::class, function () {
         return new AttachCorrelationIdPipelineStep();
     });
 }