public void ConfigureEndpoints <T>(IReceiveConfigurator <T> configurator, IEndpointNameFormatter endpointNameFormatter = null)
     where T : IReceiveEndpointConfigurator
 {
     ConfigureEndpoints(configurator, endpointNameFormatter, NoFilter);
 }
Example #2
0
        string IEndpointDefinition.GetEndpointName(IEndpointNameFormatter formatter)
        {
            var endpointName = _definition.GetEndpointName(formatter);

            return(ServiceEndpointNameFormatter.Instance.InstanceServiceEndpointName(endpointName, _instance.InstanceName, formatter));
        }
Example #3
0
 public abstract HostReceiveEndpointHandle ConnectReceiveEndpoint(IEndpointDefinition definition, IEndpointNameFormatter endpointNameFormatter,
                                                                  Action <IReceiveEndpointConfigurator> configureEndpoint = null);
Example #4
0
 string IExecuteActivityDefinition.GetExecuteEndpointName(IEndpointNameFormatter formatter)
 {
     return(_endpointDefinition.GetEndpointName(formatter));
 }
        HostReceiveEndpointHandle IReceiveConnector <IAmazonSqsReceiveEndpointConfigurator> .ConnectReceiveEndpoint(IEndpointDefinition definition,
                                                                                                                    IEndpointNameFormatter endpointNameFormatter, Action <IAmazonSqsReceiveEndpointConfigurator> configureEndpoint)
        {
            if (_host == null)
            {
                throw new InvalidOperationException("The host is not ready.");
            }

            return(_host.ConnectReceiveEndpoint(definition, endpointNameFormatter, configureEndpoint));
        }
 /// <summary>
 /// Connect a response endpoint for the host
 /// </summary>
 /// <param name="connector">The host to connect</param>
 /// <param name="endpointNameFormatter"></param>
 /// <param name="configureEndpoint">The configuration callback</param>
 public static HostReceiveEndpointHandle ConnectResponseEndpoint(this IReceiveConnector connector, IEndpointNameFormatter endpointNameFormatter = null,
                                                                 Action <IReceiveEndpointConfigurator> configureEndpoint = null)
 {
     return(connector.ConnectReceiveEndpoint(new ResponseEndpointDefinition(), endpointNameFormatter, configureEndpoint));
 }
Example #7
0
 public string GetEndpointName(IEndpointNameFormatter formatter)
 {
     return(RabbitMqExchangeNames.ReplyTo);
 }
Example #8
0
 protected abstract string FormatEndpointName(IEndpointNameFormatter formatter);
Example #9
0
 public override HostReceiveEndpointHandle ConnectReceiveEndpoint(IEndpointDefinition definition, IEndpointNameFormatter endpointNameFormatter,
                                                                  Action <IReceiveEndpointConfigurator> configureEndpoint = null)
 {
     throw new NotImplementedException();
 }
 /// <summary>
 /// Configure the endpoints for all defined consumer, saga, and activity types using an optional
 /// endpoint name formatter. If no endpoint name formatter is specified and an <see cref="IEndpointNameFormatter" />
 /// is registered in the container, it is resolved from the container. Otherwise, the <see cref="DefaultEndpointNameFormatter" />
 /// is used.
 /// </summary>
 /// <param name="configurator">The <see cref="IBusFactoryConfigurator" /> for the bus being configured</param>
 /// <param name="registration">The registration for this bus instance</param>
 /// <param name="configureFilter">Filter the configured consumers, sagas, and activities</param>
 /// <param name="endpointNameFormatter">Optional, the endpoint name formatter</param>
 /// <typeparam name="T">The bus factory type (depends upon the transport)</typeparam>
 public static void ConfigureEndpoints <T>(this IReceiveConfigurator <T> configurator, IBusRegistrationContext registration,
                                           Action <IRegistrationFilterConfigurator> configureFilter, IEndpointNameFormatter endpointNameFormatter = null)
     where T : IReceiveEndpointConfigurator
 {
     registration.ConfigureEndpoints(configurator, endpointNameFormatter, configureFilter);
 }
Example #11
0
 public string GetEndpointName(IEndpointNameFormatter formatter)
 {
     return(_endpointName ?? (_endpointName = string.IsNullOrWhiteSpace(_settings.Name)
         ? FormatEndpointName(formatter)
         : _settings.Name));
 }
 public override string GetEndpointName(IEndpointNameFormatter formatter)
 {
     return(formatter.TemporaryEndpoint($"signalr_{_hubName.Value}"));
 }
 string IEndpointDefinition.GetEndpointName(IEndpointNameFormatter formatter)
 {
     return(_configuration.Queue);
 }
        public void ConfigureEndpoints <T>(IReceiveConfigurator <T> configurator, IEndpointNameFormatter endpointNameFormatter,
                                           Action <IRegistrationFilterConfigurator> configureFilter)
            where T : IReceiveEndpointConfigurator
        {
            endpointNameFormatter ??= GetService <IEndpointNameFormatter>() ?? DefaultEndpointNameFormatter.Instance;

            var configureReceiveEndpoint = GetConfigureReceiveEndpoints();

            var builder = new RegistrationFilterConfigurator();

            configureFilter?.Invoke(builder);

            var registrationFilter = builder.Filter;

            List <IGrouping <string, IConsumerDefinition> > consumersByEndpoint = Consumers.Values
                                                                                  .Where(x => registrationFilter.Matches(x) && !WasConfigured(x.ConsumerType))
                                                                                  .Select(x => x.GetDefinition(this))
                                                                                  .GroupBy(x => x.GetEndpointName(endpointNameFormatter))
                                                                                  .ToList();

            List <IGrouping <string, ISagaDefinition> > sagasByEndpoint = Sagas.Values
                                                                          .Where(x => registrationFilter.Matches(x) && !WasConfigured(x.SagaType))
                                                                          .Select(x => x.GetDefinition(this))
                                                                          .GroupBy(x => x.GetEndpointName(endpointNameFormatter))
                                                                          .ToList();

            List <IActivityDefinition> activities = Activities.Values
                                                    .Where(x => registrationFilter.Matches(x) && !WasConfigured(x.ActivityType))
                                                    .Select(x => x.GetDefinition(this))
                                                    .ToList();

            List <IGrouping <string, IActivityDefinition> > activitiesByExecuteEndpoint = activities
                                                                                          .GroupBy(x => x.GetExecuteEndpointName(endpointNameFormatter))
                                                                                          .ToList();

            List <IGrouping <string, IActivityDefinition> > activitiesByCompensateEndpoint = activities
                                                                                             .GroupBy(x => x.GetCompensateEndpointName(endpointNameFormatter))
                                                                                             .ToList();

            List <IGrouping <string, IExecuteActivityDefinition> > executeActivitiesByEndpoint = ExecuteActivities.Values
                                                                                                 .Where(x => registrationFilter.Matches(x) && !WasConfigured(x.ActivityType))
                                                                                                 .Select(x => x.GetDefinition(this))
                                                                                                 .GroupBy(x => x.GetExecuteEndpointName(endpointNameFormatter))
                                                                                                 .ToList();

            var endpointsWithName = _endpoints.Values
                                    .Select(x => x.GetDefinition(this))
                                    .Select(x => new
            {
                Name       = x.GetEndpointName(endpointNameFormatter),
                Definition = x
            })
                                    .GroupBy(x => x.Name, (name, values) => new
            {
                Name       = name,
                Definition = values.Select(x => x.Definition).Combine()
            })
                                    .ToList();

            IEnumerable <string> endpointNames = consumersByEndpoint.Select(x => x.Key)
                                                 .Union(sagasByEndpoint.Select(x => x.Key))
                                                 .Union(activitiesByExecuteEndpoint.Select(x => x.Key))
                                                 .Union(executeActivitiesByEndpoint.Select(x => x.Key))
                                                 .Union(endpointsWithName.Select(x => x.Name))
                                                 .Except(activitiesByCompensateEndpoint.Select(x => x.Key));

            var endpoints =
                from e in endpointNames
                join c in consumersByEndpoint on e equals c.Key into cs
                from c in cs.DefaultIfEmpty()
                join s in sagasByEndpoint on e equals s.Key into ss
                from s in ss.DefaultIfEmpty()
                join a in activitiesByExecuteEndpoint on e equals a.Key into aes
                from a in aes.DefaultIfEmpty()
                join ea in executeActivitiesByEndpoint on e equals ea.Key into eas
                from ea in eas.DefaultIfEmpty()
                join ep in endpointsWithName on e equals ep.Name into eps
                from ep in eps.Select(x => x.Definition)
                .DefaultIfEmpty(c?.Select(x => (IEndpointDefinition) new DelegateEndpointDefinition(e, x, x.EndpointDefinition)).Combine()
                                ?? s?.Select(x => (IEndpointDefinition) new DelegateEndpointDefinition(e, x, x.EndpointDefinition)).Combine()
                                ?? a?.Select(x => (IEndpointDefinition) new DelegateEndpointDefinition(e, x, x.ExecuteEndpointDefinition)).Combine()
                                ?? ea?.Select(x => (IEndpointDefinition) new DelegateEndpointDefinition(e, x, x.ExecuteEndpointDefinition)).Combine()
                                ?? new NamedEndpointDefinition(e))
                select new
            {
                Name              = e,
                Definition        = ep,
                Consumers         = c,
                Sagas             = s,
                Activities        = a,
                ExecuteActivities = ea
            };

            foreach (var endpoint in endpoints)
            {
                configurator.ReceiveEndpoint(endpoint.Definition, endpointNameFormatter, cfg =>
                {
                    configureReceiveEndpoint.Configure(endpoint.Definition.GetEndpointName(endpointNameFormatter), cfg);

                    if (endpoint.Consumers != null)
                    {
                        foreach (var consumer in endpoint.Consumers)
                        {
                            ConfigureConsumer(consumer.ConsumerType, cfg);
                        }
                    }

                    if (endpoint.Sagas != null)
                    {
                        foreach (var saga in endpoint.Sagas)
                        {
                            ConfigureSaga(saga.SagaType, cfg);
                        }
                    }

                    if (endpoint.Activities != null)
                    {
                        foreach (var activity in endpoint.Activities)
                        {
                            var compensateEndpointName = activity.GetCompensateEndpointName(endpointNameFormatter);

                            var compensateDefinition = activity.CompensateEndpointDefinition ??
                                                       endpointsWithName.SingleOrDefault(x => x.Name == compensateEndpointName)?.Definition;

                            if (compensateDefinition != null)
                            {
                                configurator.ReceiveEndpoint(compensateDefinition, endpointNameFormatter, compensateEndpointConfigurator =>
                                {
                                    configureReceiveEndpoint.Configure(compensateDefinition.GetEndpointName(endpointNameFormatter), cfg);

                                    ConfigureActivity(activity.ActivityType, cfg, compensateEndpointConfigurator);
                                });
                            }
                            else
                            {
                                configurator.ReceiveEndpoint(compensateEndpointName, compensateEndpointConfigurator =>
                                {
                                    configureReceiveEndpoint.Configure(compensateEndpointName, cfg);

                                    ConfigureActivity(activity.ActivityType, cfg, compensateEndpointConfigurator);
                                });
                            }
                        }
                    }

                    if (endpoint.ExecuteActivities != null)
                    {
                        foreach (var activity in endpoint.ExecuteActivities)
                        {
                            ConfigureExecuteActivity(activity.ActivityType, cfg);
                        }
                    }
                });
            }
        }
Example #15
0
        public void ConfigureEndpoints <T>(T configurator, IEndpointNameFormatter endpointNameFormatter)
            where T : IReceiveConfigurator
        {
            if (configurator == null)
            {
                throw new ArgumentNullException(nameof(configurator));
            }

            if (endpointNameFormatter == null)
            {
                endpointNameFormatter = _configurationServiceProvider.GetService <IEndpointNameFormatter>()
                                        ?? DefaultEndpointNameFormatter.Instance;
            }

            var consumersByEndpoint = _consumers.Values
                                      .Select(x => x.GetDefinition(_configurationServiceProvider))
                                      .GroupBy(x => x.GetEndpointName(endpointNameFormatter));

            var sagasByEndpoint = _sagas.Values
                                  .Select(x => x.GetDefinition(_configurationServiceProvider))
                                  .GroupBy(x => x.GetEndpointName(endpointNameFormatter));

            var activities = _activities.Values
                             .Select(x => x.GetDefinition(_configurationServiceProvider))
                             .ToArray();

            var activitiesByExecuteEndpoint = activities
                                              .GroupBy(x => x.GetExecuteEndpointName(endpointNameFormatter));

            var activitiesByCompensateEndpoint = activities
                                                 .GroupBy(x => x.GetCompensateEndpointName(endpointNameFormatter));

            var executeActivitiesByEndpoint = _executeActivities.Values
                                              .Select(x => x.GetDefinition(_configurationServiceProvider))
                                              .GroupBy(x => x.GetExecuteEndpointName(endpointNameFormatter));

            var endpointsWithName = _endpoints.Values
                                    .Select(x => x.GetDefinition(_configurationServiceProvider))
                                    .Select(x => new
            {
                Definition = x,
                Name       = x.GetEndpointName(endpointNameFormatter)
            });

            var endpointNames = consumersByEndpoint.Select(x => x.Key)
                                .Union(sagasByEndpoint.Select(x => x.Key))
                                .Union(activitiesByExecuteEndpoint.Select(x => x.Key))
                                .Union(executeActivitiesByEndpoint.Select(x => x.Key))
                                .Union(endpointsWithName.Select(x => x.Name))
                                .Except(activitiesByCompensateEndpoint.Select(x => x.Key));

            var endpoints =
                from e in endpointNames
                join c in consumersByEndpoint on e equals c.Key into cs
                from c in cs.DefaultIfEmpty()
                join s in sagasByEndpoint on e equals s.Key into ss
                from s in ss.DefaultIfEmpty()
                join a in activitiesByExecuteEndpoint on e equals a.Key into aes
                from a in aes.DefaultIfEmpty()
                join ea in executeActivitiesByEndpoint on e equals ea.Key into eas
                from ea in eas.DefaultIfEmpty()
                join ep in endpointsWithName on e equals ep.Name into eps
                from ep in eps.Select(x => x.Definition)
                .DefaultIfEmpty(c?.Select(x => (IEndpointDefinition) new DelegateEndpointDefinition(e, x)).SingleOrDefault()
                                ?? s?.Select(x => (IEndpointDefinition) new DelegateEndpointDefinition(e, x)).SingleOrDefault()
                                ?? a?.Select(x => (IEndpointDefinition) new DelegateEndpointDefinition(e, x)).SingleOrDefault()
                                ?? ea?.Select(x => (IEndpointDefinition) new DelegateEndpointDefinition(e, x)).SingleOrDefault()
                                ?? new NamedEndpointDefinition(e))
                select new
            {
                Name              = e,
                Definition        = ep,
                Consumers         = c,
                Sagas             = s,
                Activities        = a,
                ExecuteActivities = ea
            };

            foreach (var endpoint in endpoints)
            {
                configurator.ReceiveEndpoint(endpoint.Definition, endpointNameFormatter, cfg =>
                {
                    if (endpoint.Consumers != null)
                    {
                        foreach (var consumer in endpoint.Consumers)
                        {
                            LogContext.Debug?.Log("Configuring consumer {ConsumerType} on {Endpoint}", TypeMetadataCache.GetShortName(consumer.ConsumerType),
                                                  endpoint.Name);

                            ConfigureConsumer(consumer.ConsumerType, cfg);
                        }
                    }

                    if (endpoint.Sagas != null)
                    {
                        foreach (var saga in endpoint.Sagas)
                        {
                            LogContext.Debug?.Log("Configuring saga {SagaType} on {Endpoint}", TypeMetadataCache.GetShortName(saga.SagaType), endpoint.Name);

                            ConfigureSaga(saga.SagaType, cfg);
                        }
                    }

                    if (endpoint.Activities != null)
                    {
                        foreach (var activity in endpoint.Activities)
                        {
                            var compensateEndpointName = activity.GetCompensateEndpointName(endpointNameFormatter);

                            var compensateDefinition = endpointsWithName.SingleOrDefault(x => x.Name == compensateEndpointName)?.Definition;
                            if (compensateDefinition != null)
                            {
                                configurator.ReceiveEndpoint(compensateDefinition, endpointNameFormatter, compensateEndpointConfigurator =>
                                {
                                    LogContext.Debug?.Log("Configuring receive endpoint {Endpoint}", ToEndpointString(compensateEndpointName,
                                                                                                                      compensateDefinition));

                                    LogContext.Debug?.Log("Configuring activity {ActivityType} on {ExecuteEndpoint} / {CompensateEndpoint}",
                                                          TypeMetadataCache.GetShortName(activity.ActivityType), endpoint.Name, compensateEndpointName);

                                    ConfigureActivity(activity.ActivityType, cfg, compensateEndpointConfigurator);
                                });
                            }
                            else
                            {
                                configurator.ReceiveEndpoint(compensateEndpointName, compensateEndpointConfigurator =>
                                {
                                    LogContext.Debug?.Log("Configuring activity {ActivityType} on {ExecuteEndpoint} / {CompensateEndpoint}",
                                                          TypeMetadataCache.GetShortName(activity.ActivityType), endpoint.Name, compensateEndpointName);

                                    ConfigureActivity(activity.ActivityType, cfg, compensateEndpointConfigurator);
                                });
                            }
                        }
                    }

                    if (endpoint.ExecuteActivities != null)
                    {
                        foreach (var activity in endpoint.ExecuteActivities)
                        {
                            LogContext.Debug?.Log("Configuring activity {ActivityType} on {ExecuteEndpoint}",
                                                  TypeMetadataCache.GetShortName(activity.ActivityType), endpoint.Name);

                            ConfigureExecuteActivity(activity.ActivityType, cfg);
                        }
                    }
                });
            }
        }
 public string GetEndpointName(IEndpointNameFormatter formatter)
 {
     return(_definitions.FirstOrDefault()?.GetEndpointName(formatter));
 }
        /// <summary>
        /// Configure the endpoints for all defined consumer, saga, and activity types using an optional
        /// endpoint name formatter. If no endpoint name formatter is specified and an <see cref="IEndpointNameFormatter"/>
        /// is registered in the container, it is resolved from the container. Otherwise, the <see cref="DefaultEndpointNameFormatter"/>
        /// is used.
        /// </summary>
        /// <param name="configurator">The <see cref="IBusFactoryConfigurator"/> for the bus being configured</param>
        /// <param name="context">The container reference</param>
        /// <param name="endpointNameFormatter">Optional, the endpoint name formatter</param>
        /// <typeparam name="T">The bus factory type (depends upon the transport)</typeparam>
        public static void ConfigureEndpoints <T>(this T configurator, IComponentContext context, IEndpointNameFormatter endpointNameFormatter = null)
            where T : IReceiveConfigurator
        {
            var registration = context.Resolve <IRegistration>();

            registration.ConfigureEndpoints(configurator, endpointNameFormatter);
        }
        /// <summary>
        /// Configure the endpoints for all defined consumer, saga, and activity types using an optional
        /// endpoint name formatter. If no endpoint name formatter is specified and an <see cref="IEndpointNameFormatter"/>
        /// is registered in the container, it is resolved from the container. Otherwise, the <see cref="DefaultEndpointNameFormatter"/>
        /// is used.
        /// </summary>
        /// <param name="configurator">The <see cref="IBusFactoryConfigurator"/> for the bus being configured</param>
        /// <param name="provider">The container reference</param>
        /// <param name="endpointNameFormatter">Optional, the endpoint name formatter</param>
        /// <typeparam name="T">The bus factory type (depends upon the transport)</typeparam>
        public static void ConfigureEndpoints <T>(this T configurator, IServiceProvider provider, IEndpointNameFormatter endpointNameFormatter = null)
            where T : IReceiveConfigurator
        {
            var registration = provider.GetRequiredService <IRegistration>();

            registration.ConfigureEndpoints(configurator, endpointNameFormatter);
        }
Example #19
0
            public HostReceiveEndpointHandle ConnectReceiveEndpoint(IEndpointDefinition definition, IEndpointNameFormatter endpointNameFormatter,
                                                                    Action <IBusRegistrationContext, IReceiveEndpointConfigurator> configure = null)
            {
                return(BusControl.ConnectReceiveEndpoint(definition, endpointNameFormatter, configurator =>
                {
                    _busRegistrationContext.GetConfigureReceiveEndpoints().Configure(definition.GetEndpointName(endpointNameFormatter), configurator);

                    configure?.Invoke(_busRegistrationContext, configurator);
                }));
            }
Example #20
0
 public override string GetEndpointName(IEndpointNameFormatter formatter)
 {
     return(formatter.TemporaryEndpoint($"signalr_{typeof(THub).Name}"));
 }
Example #21
0
 string IActivityDefinition.GetCompensateEndpointName(IEndpointNameFormatter formatter)
 {
     return(_compensateEndpointDefinition.GetEndpointName(formatter));
 }
Example #22
0
        public HostReceiveEndpointHandle ConnectReceiveEndpoint(IEndpointDefinition definition, IEndpointNameFormatter endpointNameFormatter = null,
                                                                Action <IServiceBusReceiveEndpointConfigurator> configureEndpoint            = null)
        {
            var queueName = definition.GetEndpointName(endpointNameFormatter ?? DefaultEndpointNameFormatter.Instance);

            return(ConnectReceiveEndpoint(queueName, configurator =>
            {
                _hostConfiguration.ApplyEndpointDefinition(configurator, definition);
                configureEndpoint?.Invoke(configurator);
            }));
        }
Example #23
0
 HostReceiveEndpointHandle IReceiveConnector.ConnectReceiveEndpoint(IEndpointDefinition definition, IEndpointNameFormatter endpointNameFormatter,
                                                                    Action <IReceiveEndpointConfigurator> configureEndpoint)
 {
     return(_host.ConnectReceiveEndpoint(definition, endpointNameFormatter, configureEndpoint));
 }
Example #24
0
 public void SetEndpointNameFormatter(IEndpointNameFormatter endpointNameFormatter)
 {
     Registrar.RegisterSingleInstance(endpointNameFormatter);
 }
Example #25
0
 void IReceiveConfigurator.ReceiveEndpoint(IEndpointDefinition definition, IEndpointNameFormatter endpointNameFormatter,
                                           Action <IReceiveEndpointConfigurator> configureEndpoint)
 {
     ReceiveEndpoint(definition, endpointNameFormatter, x => configureEndpoint(x));
 }
 protected override string FormatEndpointName(IEndpointNameFormatter formatter)
 {
     return(formatter.Consumer <TConsumer>());
 }
Example #27
0
        public HostReceiveEndpointHandle ConnectReceiveEndpoint(IEndpointDefinition definition, IEndpointNameFormatter endpointNameFormatter,
                                                                Action <IInMemoryReceiveEndpointConfigurator> configureEndpoint = null)
        {
            var queueName = definition.GetEndpointName(endpointNameFormatter ?? DefaultEndpointNameFormatter.Instance);

            return(ConnectReceiveEndpoint(queueName, x => x.Apply(definition, configureEndpoint)));
        }
Example #28
0
 string IEndpointDefinition.GetEndpointName(IEndpointNameFormatter formatter)
 {
     return(ServiceEndpointNameFormatter.Instance.InstanceEndpointName(_instance.InstanceName, formatter));
 }
Example #29
0
 public override HostReceiveEndpointHandle ConnectReceiveEndpoint(IEndpointDefinition definition, IEndpointNameFormatter endpointNameFormatter,
                                                                  Action <IReceiveEndpointConfigurator> configureEndpoint = null)
 {
     return(ConnectReceiveEndpoint(definition, endpointNameFormatter, configureEndpoint));
 }
Example #30
0
 public BurgerItineraryPlanner(IEndpointNameFormatter formatter, ConsumeContext consumeContext)
 {
     _consumeContext = consumeContext;
     _grillAddress   = new Uri($"exchange:{formatter.ExecuteActivity<GrillBurgerActivity, GrillBurgerArguments>()}");
     _dressAddress   = new Uri($"exchange:{formatter.ExecuteActivity<DressBurgerActivity, DressBurgerArguments>()}");
 }