public JobServiceConfigurator(IServiceInstanceConfigurator <TReceiveEndpointConfigurator> instanceConfigurator) { _instanceConfigurator = instanceConfigurator; JobService = new JobService(_instanceConfigurator.InstanceAddress); instanceConfigurator.ConnectBusObserver(new JobServiceBusObserver(JobService)); instanceConfigurator.AddSpecification(this); _options = _instanceConfigurator.Options <JobServiceOptions>(options => { options.JobService = JobService; options.JobTypeSagaEndpointName = _instanceConfigurator.EndpointNameFormatter.Saga <JobTypeSaga>(); options.JobStateSagaEndpointName = _instanceConfigurator.EndpointNameFormatter.Saga <JobSaga>(); options.JobAttemptSagaEndpointName = _instanceConfigurator.EndpointNameFormatter.Saga <JobAttemptSaga>(); }); _instanceConfigurator.ConnectEndpointConfigurationObserver(new JobServiceEndpointConfigurationObserver(_options, cfg => { if (_jobTypeSagaEndpointConfigurator != null) { cfg.AddDependency(_jobTypeSagaEndpointConfigurator); } if (_jobSagaEndpointConfigurator != null) { cfg.AddDependency(_jobSagaEndpointConfigurator); } if (_jobAttemptSagaEndpointConfigurator != null) { cfg.AddDependency(_jobAttemptSagaEndpointConfigurator); } })); }
/// <summary> /// Configures support for job consumers on the service instance, which supports executing long-running jobs without blocking the consumer pipeline. /// Job consumers use multiple state machines to track jobs, each of which runs on its own dedicated receive endpoint. Multiple service /// instances will use the competing consumer pattern, so a shared saga repository should be configured. /// This method does not configure the state machine endpoints required to use the job service, and should only be used for services where another /// service has the job service endpoints configured. /// </summary> /// <typeparam name="T">The transport receive endpoint configurator type</typeparam> /// <param name="configurator">The Conductor service instance</param> /// <param name="options"></param> /// <param name="configure"></param> internal static IServiceInstanceConfigurator <T> ConfigureJobService <T>(this IServiceInstanceConfigurator <T> configurator, JobServiceOptions options, Action <IJobServiceConfigurator> configure = default) where T : IReceiveEndpointConfigurator { var jobServiceConfigurator = new JobServiceConfigurator <T>(configurator, options); configure?.Invoke(jobServiceConfigurator); return(configurator); }
/// <summary> /// Configures support for job consumers on the service instance, which supports executing long-running jobs without blocking the consumer pipeline. /// Job consumers use multiple state machines to track jobs, each of which runs on its own dedicated receive endpoint. Multiple service /// instances will use the competing consumer pattern, so a shared saga repository should be configured. /// This method does not configure the state machine endpoints required to use the job service, and should only be used for services where another /// service has the job service endpoints configured. /// </summary> /// <typeparam name="T">The transport receive endpoint configurator type</typeparam> /// <param name="configurator">The Conductor service instance</param> /// <param name="options"></param> internal static IServiceInstanceConfigurator <T> ConfigureJobService <T>(this IServiceInstanceConfigurator <T> configurator, JobServiceOptions options) where T : IReceiveEndpointConfigurator { var jobServiceConfigurator = new JobServiceConfigurator <T>(configurator); jobServiceConfigurator.ApplyJobServiceOptions(options); return(configurator); }
public JobService(IServiceInstanceConfigurator configurator, JobServiceOptions options) { _options = options; InstanceAddress = configurator.InstanceAddress; _jobTypes = new Dictionary <Type, IJobTypeRegistration>(); _jobs = new ConcurrentDictionary <Guid, JobHandle>(); ConfigureSuperviseJobConsumer(configurator.InstanceEndpointConfigurator); }
/// <summary> /// Configures support for job consumers on the service instance, which supports executing long-running jobs without blocking the consumer pipeline. /// Job consumers use multiple state machines to track jobs, each of which runs on its own dedicated receive endpoint. Multiple service /// instances will use the competing consumer pattern, so a shared saga repository should be configured. /// </summary> /// <typeparam name="T">The transport receive endpoint configurator type</typeparam> /// <param name="configurator">The Conductor service instance</param> /// <param name="configure"></param> public static IServiceInstanceConfigurator <T> ConfigureJobServiceEndpoints <T>(this IServiceInstanceConfigurator <T> configurator, Action <IJobServiceConfigurator> configure = default) where T : IReceiveEndpointConfigurator { var jobServiceConfigurator = new JobServiceConfigurator <T>(configurator); configure?.Invoke(jobServiceConfigurator); jobServiceConfigurator.ConfigureJobServiceEndpoints(); return(configurator); }