Ejemplo n.º 1
0
        public IFactoryBroker ApplyConfiguration(IFactoryBroker broker)
        {
            if (Brokers != null)
            {
                if (Brokers.Servers != null)
                {
                    foreach (var server in Brokers.Servers)
                    {
                        broker.Add(server);
                    }
                }

                if (Brokers.Publishers != null)
                {
                    foreach (var publisher in Brokers.Publishers)
                    {
                        broker.Add(publisher);
                    }
                }

                if (Brokers.Subscribers != null)
                {
                    foreach (var subscriber in Brokers.Subscribers)
                    {
                        broker.Add(subscriber);
                    }
                }
            }

            return(broker);
        }
Ejemplo n.º 2
0
        public static RabbitMqAppender Initialize(IFactoryBroker self, string name, string rabbitPublisherName, bool reformat = true, int appendLogsIntervalSeconds = 2, params string[] restrictedTracks)
        {
            if (string.IsNullOrEmpty(rabbitPublisherName))
            {
                throw new Bb.Exceptions.InvalidConfigurationException(nameof(rabbitPublisherName));
            }

            var ex = self.CheckPublisher(rabbitPublisherName);

            if (ex != null)
            {
                throw ex;
            }

            var logger = new RabbitMqAppender(self, appendLogsIntervalSeconds)
            {
                Name          = name,
                PublisherName = rabbitPublisherName,
                Reformat      = reformat
                                //TraceOutputOptions = TraceOptions.
            };

            if (restrictedTracks.Length > 0)
            {
                logger.RestrictedTracks = new HashSet <string>(restrictedTracks);
            }

            System.Diagnostics.Trace.Listeners.Add(logger);
            return(logger);
        }
Ejemplo n.º 3
0
        public static IFactoryBroker Initialize(this IFactoryBroker brokers)
        {
            foreach (string serverName in brokers.GetServerBrokerNames())
            {
                var broker = brokers.CreateServerBroker(serverName);

                Trace.WriteLine($"test to connect to {serverName}");
                if (!broker.CheckConnection())
                {
                }
            }

            foreach (string subscriberName in brokers.GetSubscriberNames())
            {
                Trace.WriteLine($"Check to subscribe {subscriberName}");
                var e = brokers.CheckSubscription(subscriberName);
                if (e != null)
                {
                    throw e;
                }
            }

            foreach (string publisherName in brokers.GetPublisherNames())
            {
                Trace.WriteLine($"Check publisher {publisherName}");

                var e = brokers.CheckPublisher(publisherName);
                if (e != null)
                {
                    throw e;
                }
            }

            return(brokers);
        }
        /// <summary>
        /// Load configuration for rabbit
        /// </summary>
        /// <param name="selfPath"></param>
        /// <param name="factoryBroker"></param>
        /// <param name="serverPatternExtension"></param>
        /// <param name="publisherPatternExtension"></param>
        /// <param name="subscriberPatternExtension"></param>
        /// <returns>true if the directory exists</returns>
        public static bool LoadFolderFromJson(this string selfPath,
                                              IFactoryBroker factoryBroker,
                                              string serverPatternExtension     = "*.rabbit.server",
                                              string publisherPatternExtension  = "*.rabbit.publisher",
                                              string subscriberPatternExtension = "*.rabbit.subscriber")
        {
            DirectoryInfo dir = new DirectoryInfo(selfPath);

            dir.Refresh();
            if (dir.Exists)
            {
                foreach (var file in dir.GetFiles(serverPatternExtension, SearchOption.TopDirectoryOnly))
                {
                    factoryBroker.Add(LoadFromJSon <ServerBrokerConfiguration>(File.ReadAllText(file.FullName)));
                }

                foreach (var file in dir.GetFiles(publisherPatternExtension, SearchOption.TopDirectoryOnly))
                {
                    factoryBroker.Add(LoadFromJSon <BrokerPublishParameter>(File.ReadAllText(file.FullName)));
                }

                foreach (var file in dir.GetFiles(subscriberPatternExtension, SearchOption.TopDirectoryOnly))
                {
                    factoryBroker.Add(LoadFromJSon <BrokerSubscriptionParameter>(File.ReadAllText(file.FullName)));
                }

                return(true);
            }

            return(false);
        }
Ejemplo n.º 5
0
        public void ApplyConfiguration(IFactoryBroker broker)
        {
            if (Servers != null)
            {
                foreach (var server in Servers)
                {
                    broker.Add(server);
                }
            }

            if (Publishers != null)
            {
                foreach (var publisher in Publishers)
                {
                    broker.Add(publisher);
                }
            }

            if (Subscribers != null)
            {
                foreach (var subscriber in Subscribers)
                {
                    broker.Add(subscriber);
                }
            }
        }
Ejemplo n.º 6
0
 public SubcriptionIncomingBusAction(IFactoryBroker brokers, ActionBusConfiguration configuration, ActionRunner <ActionBusContext> action)
     : base("Service consume incoming adapter broker queue")
 {
     _action           = action;
     Subscription      = brokers.CreateSubscription(configuration.ActionBusBrokerConfiguration.ActionBusQueue, context => Callback(context));
     _acknowledgeQueue = brokers.CreatePublisher(configuration.ActionBusBrokerConfiguration.AcknowledgeExchange);
     _deadQueue        = brokers.CreatePublisher(configuration.ActionBusBrokerConfiguration.DeadQueueAction);
 }
Ejemplo n.º 7
0
        public static IFactoryBroker Test(this IFactoryBroker brokers, out bool successfullInitialized, int timeOutInSecond = 10)
        {
            HashSet <string> cache = new HashSet <string>();

            using (var subs = new SubscriptionInstances(brokers))
            {
                Task callback(IBrokerContext ctx)
                {
                    string key = ctx.Utf8Data;

                    Trace.WriteLine($"Depiled message {key}");

                    if (cache.Contains(key))
                    {
                        cache.Remove(ctx.Utf8Data);
                        ctx.Commit();
                    }
                    else
                    {
                        ctx.Reject();
                    }

                    return(Task.CompletedTask);
                }

                foreach (string subscriberName in brokers.GetSubscriberNames())
                {
                    Trace.WriteLine($"test to subsribe {subscriberName}");
                    subs.AddSubscription(subscriberName, subscriberName, callback);
                }

                foreach (string publisherName in brokers.GetPublisherNames())
                {
                    using (var broker = brokers.CreatePublisher(publisherName))
                    {
                        Trace.WriteLine($"test to push test message to {publisherName}");
                        var currentGuid = Guid.NewGuid().ToString();
                        cache.Add(currentGuid);
                        broker.Publish(currentGuid);
                    }
                }

                DateTime d = DateTime.Now.AddSeconds(timeOutInSecond);
                while (cache.Count > 0)
                {
                    Thread.Yield();

                    if (d < DateTime.Now)
                    {
                        break;
                    }
                }
            }

            successfullInitialized = cache.Count == 0;

            return(brokers);
        }
Ejemplo n.º 8
0
 public SubcriptionIncomingEvent(IFactoryBroker brokers, EngineGeneratorConfiguration configuration, WebEngineProvider provider, KilledGracefulInterceptor killed)
     : base("Service consume incoming event.")
 {
     _provider          = provider;
     _domainHeader      = configuration.EngineGeneratorModel.DomainHeader;
     Subscription       = brokers.CreateSubscription(configuration.EngineGeneratorModel.WorkflowQueue, context => Callback(context));
     _deadQueue         = brokers.CreatePublisher(configuration.EngineGeneratorModel.PublishDeadQueueWorkflow);
     _killed            = killed;
     _killed.StopAction = this.PrepareStop;
 }
Ejemplo n.º 9
0
        private RabbitMqAppender(IFactoryBroker factory, int appendLogsIntervalSeconds)
        {
            ass1 = GetType().Assembly;
            ass2 = typeof(TraceListener).Assembly;

            AppendLogsIntervalSeconds = appendLogsIntervalSeconds;
            _factoryBrocker           = factory;
            _bag   = new List <Task>();
            _timer = new Timer(AppendAsync, null, AppendLogsIntervalSeconds * 1000, AppendLogsIntervalSeconds * 1000);
        }
Ejemplo n.º 10
0
        public static IServiceProvider  RegisterResponsesReminder(this IServiceProvider services)
        {
            ReminderService reminder = services.GetService(typeof(IReminderRequest)) as ReminderService;
            //ReminderConfiguration configuration = services.GetService(typeof(ReminderConfiguration)) as ReminderConfiguration;
            IFactoryBroker factory = services.GetService(typeof(IFactoryBroker)) as IFactoryBroker;

            reminder.AddResponses(
                new ReminderResponseBroker(factory)
                );

            return(services);
        }
Ejemplo n.º 11
0
        public static IFactoryBroker AddDirect(this IFactoryBroker brokers, string serverName
                                               , string publisherName
                                               , string subscriberName
                                               , string exchangeName
                                               , string queueName
                                               )
        {
            var e = brokers.CheckServerBroker(serverName);

            if (e != null)
            {
                throw e;
            }

            BrokerPublishParameter publisher = brokers.GetConfigurationPublisher(publisherName) as BrokerPublishParameter;

            if (publisher == null)
            {
                brokers.Add(publisher = new BrokerPublishParameter()
                {
                    Name               = publisherName,
                    ServerName         = serverName,
                    ExchangeType       = ExchangeType.DIRECT,
                    ExchangeName       = exchangeName,
                    DefaultRountingKey = queueName
                });
            }
            else
            {
            }

            BrokerSubscriptionParameter subscriber = brokers.GetConfigurationSubscriber(publisherName) as BrokerSubscriptionParameter;

            if (subscriber == null)
            {
                brokers.Add(subscriber = new BrokerSubscriptionParameter()
                {
                    Name             = subscriberName,
                    ServerName       = serverName,
                    ExchangeType     = ExchangeType.DIRECT,
                    ExchangeName     = exchangeName,
                    StorageQueueName = queueName,
                }.AddRoutingKeys(queueName)

                            );
            }

            return(brokers);
        }
        public static IServiceProvider RegisterListeners(this IServiceProvider serviceProvider)
        {
            SubscriptionInstances subscriptions      = serviceProvider.GetService(typeof(SubscriptionInstances)) as SubscriptionInstances;
            IFactoryBroker        brokers            = serviceProvider.GetService(typeof(IFactoryBroker)) as IFactoryBroker;
            IConfiguration        configuration      = serviceProvider.GetService(typeof(IConfiguration)) as IConfiguration;
            ActionRepositories    actionRepositories = serviceProvider.GetService(typeof(ActionRepositories)) as ActionRepositories;

            var          subscriberName = configuration.GetValue <string>("listener");
            Subcription1 sub            = new Subcription1("Actions", brokers, subscriberName, actionRepositories)
            {
                _acknowledgeQueue = brokers.CreatePublisher(configuration.GetValue <string>("AcknowledgeQueue")),
                _deadQueue        = brokers.CreatePublisher(configuration.GetValue <string>("DeadQueue")),
            };

            subscriptions.AddSubscription(sub);

            return(serviceProvider);
        }
Ejemplo n.º 13
0
        public static void RegisterLogToBrokers(this List <object> _instances)
        {
            IServiceCollection services      = _instances.First(c => (c is IServiceCollection)) as IServiceCollection;
            IConfiguration     configuration = _instances.First(c => (c is IConfiguration)) as IConfiguration;
            IFactoryBroker     brokers       = _instances.First(c => (c is IFactoryBroker)) as IFactoryBroker;

            var loggers = Collectkeys(configuration, "Loggers");

            foreach (string item in loggers)
            {
                RabbitBrokerLog p = new RabbitBrokerLog();
                if (!ConnectionStringHelper.Map <RabbitBrokerLog>(p, item, false))
                {
                    throw new Bb.Exceptions.InvalidConfigurationException($"parameters can't be mapped from '{item}'");
                }

                var appender = Bb.LogAppender.RabbitMqAppender.Initialize(brokers, p.Name, p.PublisherName, p.Reformat, p.AppendLogsIntervalSeconds, p.Tracks.ToArray());

                Trace.WriteLine($"Logger {appender.Name} initialized");
            }
        }
Ejemplo n.º 14
0
 public ActionBusConfiguration(ActionBusBrokerConfiguration actionBusBrokerConfiguration, IFactoryBroker brokerConfiguration)
 {
     this.ActionBusBrokerConfiguration = actionBusBrokerConfiguration;
     this.Broker = brokerConfiguration;
 }
Ejemplo n.º 15
0
 public Subcription1(string name, IFactoryBroker brokers, string subscriberName, ActionRepositories actionRepositories)
     : base(name)
 {
     _actionRepositories = actionRepositories;
     Subscription        = brokers.CreateSubscription(subscriberName, context => Callback(context));
 }
 /// <summary>
 /// Adds the server from connection string.
 /// </summary>
 /// <param name="self">The self.</param>
 /// <param name="payload">The payload.</param>
 /// <returns></returns>
 public static IFactoryBroker AddServerFromConnectionString(this IFactoryBroker self, string payload)
 {
     self.Add(payload.LoadServerFromConnectionString());
     return(self);
 }
Ejemplo n.º 17
0
 public EngineGeneratorConfiguration(EngineGeneratorModel engineGeneratorModel, IFactoryBroker broker, EngineConfigurationModel engineConfiguration, IServiceProvider services)
 {
     this.EngineGeneratorModel = engineGeneratorModel;
     this.Broker = broker;
     this.EngineConfiguration = engineConfiguration;
     this.Services            = services;
 }
Ejemplo n.º 18
0
 public SubscriptionInstances(IFactoryBroker borkers)
 {
     _brokers = borkers;
     _items   = new List <SubscriptionInstance>();
 }
Ejemplo n.º 19
0
        public static CommandLineApplication CommandPushworkflow(this CommandLineApplication app)
        {
            var cmd = app.Command("workflow", config =>
            {
                config.Description = "push a message on workflow server";
                config.HelpOption(HelpFlag);
            });

            var cmd2 = cmd.Command("http", config =>
            {
                config.Description = "push a message on workflow server using http";
                config.HelpOption(HelpFlag);

                var validator = new GroupArgument(config, false);

                var serverName = validator.Argument("server",
                                                    "Url server of the workflow server. (this argument is required)"
                                                    , ValidatorExtension.EvaluateRequired
                                                    );

                var domain = validator.Argument("domain",
                                                "target domain workflow (this argument is required)"
                                                , ValidatorExtension.EvaluateRequired
                                                );

                var content = validator.Argument("content",
                                                 "content that you want to push on the workflow server"
                                                 , ValidatorExtension.EvaluateRequired
                                                 );

                config.OnExecute(() =>
                {
                    if (validator.Evaluate() > 0)
                    {
                        return(2);
                    }

                    string model = GetContent(content.Value);

                    var client = new BbClientHttp(new Uri(serverName.Value));
                    var result = client.Post <RootResultModel <object> >($"api/workflowProcessor/Push/{domain.Value}", model /*, GetToken() */);

                    result.Wait();

                    Output.WriteLine("item successfully pushed on workflow server.");

                    Result = Helper.Parameters.ServerUrl;

                    return(0);
                });
            });

            var cmd3 = cmd.Command("broker", config =>
            {
                config.Description = "push a message on workflow server using http";
                config.HelpOption(HelpFlag);

                var validator = new GroupArgument(config, false);

                var configBroker = validator.Argument("config",
                                                      "broker configuration (this argument is required)"
                                                      , ValidatorExtension.EvaluateRequired
                                                      );

                var publisher = validator.Argument("publisher",
                                                   "server connection string (this argument is required)"
                                                   , ValidatorExtension.EvaluateRequired
                                                   );

                var domain = validator.Argument("domain",
                                                "target domain workflow (this argument is required)"
                                                , ValidatorExtension.EvaluateRequired
                                                );

                var content = validator.Argument("content",
                                                 "content that you want to push on the workflow server"
                                                 , ValidatorExtension.EvaluateRequired
                                                 );

                config.OnExecute(() =>
                {
                    if (validator.Evaluate() > 0)
                    {
                        return(2);
                    }

                    string configRabbit = GetContent(configBroker.Value);
                    var result          = Newtonsoft.Json.JsonConvert.DeserializeObject <ConfigurationBroker>(configRabbit);

                    var publisherItem = result.Brokers.Publishers.First(c => c.Name == publisher.Value);

                    string model = GetContent(content.Value);

                    IFactoryBroker brokers = result.ApplyConfiguration(new RabbitFactoryBrokers())
                                             .Initialize();

                    using (var publisherInstance = brokers.CreatePublisher(publisher.Value))
                        using (var trans = publisherInstance.BeginTransaction())
                        {
                            publisherInstance.Publish(publisherItem.DefaultRountingKey, model, new { domain = domain.Value });
                            publisherInstance.Commit();
                        }

                    Output.WriteLine("item successfully pushed on workflow server.");

                    return(0);
                });
            });

            return(app);
        }