/// <summary>
        /// Customize your resilience settings for <see cref="Spigot"/>
        /// </summary>
        /// <param name="src">An instance of <see cref="ISpigotBuilder"/></param>
        /// <param name="resilienceBuilder">An action to build resilience</param>
        /// <returns></returns>
        public static ISpigotBuilder WithResilience(this ISpigotBuilder src, Action <Resilience> resilienceBuilder)
        {
            var resilience = new Resilience();

            resilienceBuilder(resilience);
            src.Resilience = resilience;
            return(src);
        }
예제 #2
0
        /// <summary>
        /// Allows for the configuration of the Spigot via an instance of <see cref="ISpigotBuilder"/>
        /// </summary>
        internal void Setup(ISpigotBuilder builder)
        {
            if (_initialized)
            {
                _logger.LogInformation("Unbinding previous spigot configuration for new settings");
                foreach (var stream in Streams)
                {
                    stream.DataArrived -= Spigot_DataArrived;
                }
                Streams            = null;
                AfterReceive       = null;
                BeforeSend         = null;
                InstanceIdentifier = Guid.Empty;
                ApplicationName    = string.Empty;
                Resilience         = null;
            }

            AfterReceive       = builder.AfterReceive;
            BeforeSend         = builder.BeforeSend;
            InstanceIdentifier = builder.InstanceIdentifier;
            ApplicationName    = builder.ApplicationName;
            Resilience         = builder.Resilience ?? new Resilience();
            _initialized       = true;
            builder.Services.AddSingleton(this);
            var provider = builder.Services.BuildServiceProvider();

            Streams    = provider.GetServices <ISpigotStream>() ?? new[] { new LocalStream() };
            Serializer = provider.GetService <ISpigotSerializer>() ?? new DefaultJsonSerializer();
            foreach (var stream in Streams)
            {
                stream.DataArrived += Spigot_DataArrived;
            }
            foreach (var knobType in builder.Knobs)
            {
                var knob = provider.GetService(knobType) as Knob;
                builder.Services.AddSingleton(knob);
                knob?.Register();
            }
        }
 /// <summary>
 /// Registers a <see cref="Knob"/> to handle messages from Spigot Streams
 /// </summary>
 /// <param name="src"></param>
 /// <typeparam name="TKnob"></typeparam>
 /// <typeparam name="T"></typeparam>
 /// <returns></returns>
 public static ISpigotBuilder AddKnob <TKnob, T>(this ISpigotBuilder src) where TKnob : Knob <T> where T : class, new()
 {
     src.Services.AddSingleton <TKnob>();
     src.Knobs.Add(typeof(TKnob));
     return(src);
 }
 /// <summary>
 /// Assigns a friendly name to the Spigot
 /// </summary>
 /// <param name="src"></param>
 /// <param name="friendlyName"></param>
 /// <returns></returns>
 public static ISpigotBuilder WithFriendlyName(this ISpigotBuilder src, string friendlyName)
 {
     src.ApplicationName = friendlyName;
     return(src);
 }
 /// <summary>
 /// Allows for intercepting the message after receipt but before entering the pipeline
 /// </summary>
 /// <param name="src"></param>
 /// <param name="afterReceiveAction"></param>
 /// <returns></returns>
 public static ISpigotBuilder AddAfterReceive(this ISpigotBuilder src, Action <CloudEvent> afterReceiveAction)
 {
     src.AfterReceive = afterReceiveAction;
     return(src);
 }
 /// <summary>
 /// Allows for intercepting the message before sending. This can be used for advanced scenarios
 /// </summary>
 /// <param name="src"></param>
 /// <param name="beforeSendAction"></param>
 /// <returns></returns>
 public static ISpigotBuilder AddBeforeSend(this ISpigotBuilder src, Action <CloudEvent> beforeSendAction)
 {
     src.BeforeSend = beforeSendAction;
     return(src);
 }