Пример #1
0
        private static void GenerateSettingsFiles(string ms, string pg, string d, string u, string p, FileInfo o)
        {
            IMetadataService metadataService = new MetadataService();

            if (!string.IsNullOrWhiteSpace(ms))
            {
                metadataService.UseDatabaseProvider(DatabaseProviders.SQLServer);
                metadataService.ConfigureConnectionString(ms, d, u, p);
            }
            else
            {
                metadataService.UseDatabaseProvider(DatabaseProviders.PostgreSQL);
                metadataService.ConfigureConnectionString(pg, d, u, p);
            }

            InfoBase infoBase = metadataService.LoadInfoBase();

            MessageConsumerSettings consumerSettings = CreateConsumerSettings(infoBase, metadataService);
            MessageProducerSettings producerSettings = CreateProducerSettings(infoBase, metadataService);

            string consumerPath = Path.Combine(o.FullName, CONSUMER_SETTINGS_FILE_NAME);
            string producerPath = Path.Combine(o.FullName, PRODUCER_SETTINGS_FILE_NAME);

            SaveConsumerSettings(consumerPath, consumerSettings);
            SaveProducerSettings(producerPath, producerSettings);
        }
Пример #2
0
        public MessageProducer(MessageProducerSettings messageProducerSettings)
        {
            _messageProducerSettings = messageProducerSettings;

            _properties            = _messageProducerSettings.Channel.CreateBasicProperties();
            _properties.Persistent = true;
        }
Пример #3
0
        private static void ConfigureDaJetAgentOptions(IServiceCollection services)
        {
            MessageProducerSettings settings = new MessageProducerSettings();

            IConfigurationRoot config = new ConfigurationBuilder()
                                        .SetBasePath(AppSettings.AppCatalog)
                                        .AddJsonFile("producer-settings.json", optional: false)
                                        .Build();

            config.Bind(settings);

            DaJetAgentOptions options = new DaJetAgentOptions()
            {
                DatabaseProvider = settings.DatabaseSettings.DatabaseProvider,
                ConnectionString = settings.DatabaseSettings.ConnectionString,
                HostName         = settings.MessageBrokerSettings.HostName,
                VirtualHost      = settings.MessageBrokerSettings.VirtualHost,
                PortNumber       = settings.MessageBrokerSettings.PortNumber,
                UserName         = settings.MessageBrokerSettings.UserName,
                Password         = settings.MessageBrokerSettings.Password,
                ExchangeRole     = (settings.MessageBrokerSettings.ExchangeRole == 0
                ? ExchangeRoles.Aggregator
                : ExchangeRoles.Dispatcher)
            };

            services.AddSingleton(Options.Create(options));
        }
Пример #4
0
        private static void ConfigureProducerSettings(IServiceCollection services, string catalogPath)
        {
            MessageProducerSettings settings = new MessageProducerSettings();
            IConfigurationRoot      config   = new ConfigurationBuilder()
                                               .SetBasePath(catalogPath)
                                               .AddJsonFile("producer-settings.json", optional: false)
                                               .Build();

            config.Bind(settings);
            services.Configure <MessageProducerSettings>(config);
        }
 private void DeleteExchange(IModel channel, MessageProducerSettings settings)
 {
     try
     {
         channel.ExchangeDelete(settings.ExchangeName);
         Console.WriteLine($"Exchange [{settings.ExchangeName}] deleted.");
     }
     catch (Exception ex)
     {
         Console.WriteLine($"Exchange delete error:");
         Console.WriteLine(ex.Message);
     }
 }
 private void DeleteQueue(IModel channel, MessageProducerSettings settings)
 {
     try
     {
         uint purged = channel.QueueDelete(settings.QueueName);
         Console.WriteLine($"Queue [{settings.QueueName}] deleted. {purged} messages purged.");
     }
     catch (Exception ex)
     {
         Console.WriteLine($"Queue delete error:");
         Console.WriteLine(ex.Message);
     }
 }
 private void UnbindQueue(IModel channel, MessageProducerSettings settings)
 {
     try
     {
         channel.QueueUnbind(settings.QueueName, settings.ExchangeName, string.Empty);
         Console.WriteLine($"Queue [{settings.QueueName}] unbined from exchange [{settings.ExchangeName}] successfeully.");
     }
     catch (Exception ex)
     {
         Console.WriteLine($"Queue unbind error:");
         Console.WriteLine(ex.Message);
     }
 }
Пример #8
0
        private void InitializeTestSettings()
        {
            MessageProducerSettings settings = new MessageProducerSettings()
            {
                MessageBrokerSettings = new MessageBrokerSettings()
                {
                    HostName   = "localhost",
                    UserName   = "******",
                    Password   = "******",
                    PortNumber = 5672
                }
            };

            Settings = Options.Create(settings);
        }
        private void InitializeTestSettings()
        {
            MessageProducerSettings settings = new MessageProducerSettings()
            {
                HostName     = "localhost",
                VirtualHost  = "/",
                UserName     = "******",
                Password     = "******",
                PortNumber   = 5672,
                RoutingKey   = "",
                QueueName    = "dajet-queue",
                ExchangeName = "dajet-exchange"
            };

            Settings = Options.Create(settings);
        }
Пример #10
0
        private bool TryCreateExchange(IModel channel, MessageProducerSettings settings)
        {
            bool result = true;

            try
            {
                channel.ExchangeDeclare(settings.ExchangeName, ExchangeType.Topic, true, false, null);
            }
            catch (Exception ex)
            {
                result = false;
                Console.WriteLine("Exchange declare error:");
                Console.WriteLine(ex.Message);
            }
            return(result);
        }
Пример #11
0
        private static void SaveProducerSettings(string filePath, MessageProducerSettings producerSettings)
        {
            JsonSerializerOptions options = new JsonSerializerOptions()
            {
                WriteIndented = true,
                Encoder       = JavaScriptEncoder.Create(UnicodeRanges.All)
            };

            byte[] bytes = JsonSerializer.SerializeToUtf8Bytes(producerSettings, options);
            string json  = Encoding.UTF8.GetString(bytes);

            using (StreamWriter stream = new StreamWriter(filePath, false, Encoding.UTF8))
            {
                stream.Write(json);
            }
        }
Пример #12
0
        private static MessageProducerSettings CreateProducerSettings(IMetadataService metadataService)
        {
            MessageProducerSettings settings = new MessageProducerSettings();

            settings.MessageBrokerSettings.TopicExchange = string.Format("{0}.{1}", EXCHANGE_NAMESPACE, PRODUCER_EXCHANGE_NAME);

            //ApplicationObject metaObject = infoBase.InformationRegisters.Values
            //    .Where(с => с.Name == PRODUCER_TABLE_QUEUE_NAME).FirstOrDefault();

            //if (metaObject == null) return settings;

            settings.DatabaseSettings = new Producer.DatabaseSettings()
            {
                DatabaseProvider = metadataService.DatabaseProvider,
                ConnectionString = metadataService.ConnectionString
            };

            return(settings);
        }
Пример #13
0
        private static MessageProducerSettings CreateProducerSettings(InfoBase infoBase, IMetadataService metadataService)
        {
            MessageProducerSettings settings = new MessageProducerSettings();

            MetadataObject metaObject = infoBase.InformationRegisters.Values.Where(с => с.Name == PRODUCER_TABLE_QUEUE_NAME).FirstOrDefault();

            if (metaObject == null)
            {
                return(settings);
            }

            metadataService.EnrichFromDatabase(metaObject);

            settings.DatabaseSettings = new Producer.DatabaseSettings()
            {
                DatabaseProvider = metadataService.DatabaseProvider,
                ConnectionString = metadataService.ConnectionString,
                DatabaseQueue    = new Producer.DatabaseQueue()
                {
                    TableName  = metaObject.TableName,
                    ObjectName = string.Format("{0}.{1}", METAOBJECT_BASE_NAME, PRODUCER_TABLE_QUEUE_NAME)
                }
            };
            foreach (MetadataProperty property in metaObject.Properties)
            {
                foreach (DatabaseField field in property.Fields)
                {
                    settings.DatabaseSettings.DatabaseQueue.Fields.Add(new Producer.TableField()
                    {
                        Name     = field.Name,
                        Property = property.Name
                    });
                }
            }

            return(settings);
        }
Пример #14
0
        private static void CreateRabbitMQQueues(string ms, string pg, string d, string u, string p, string rmq)
        {
            Console.Write(string.Format(CREATE_RABBITMQ_QUEUES_QUESTION, rmq));
            string answer = Console.ReadLine();

            if (answer.ToLowerInvariant() != "y")
            {
                return;
            }

            Console.Write(INPUT_HOST_TEXT);
            string host = Console.ReadLine();

            Console.Write(INPUT_PORT_TEXT);
            string port = Console.ReadLine();

            Console.Write(INPUT_USER_TEXT);
            string user = Console.ReadLine();

            Console.Write(INPUT_PASS_TEXT);
            string pass = Console.ReadLine();

            MessageProducerSettings settings = CreateMessageBrokerSettings(host, port, user, pass);

            IMetadataService metadataService = new MetadataService();

            if (!string.IsNullOrWhiteSpace(ms))
            {
                metadataService.UseDatabaseProvider(DatabaseProviders.SQLServer);
                metadataService.ConfigureConnectionString(ms, d, u, p);
            }
            else
            {
                metadataService.UseDatabaseProvider(DatabaseProviders.PostgreSQL);
                metadataService.ConfigureConnectionString(pg, d, u, p);
            }

            Console.WriteLine(LOADING_METADATA_NOTICE);
            InfoBase infoBase = metadataService.LoadInfoBase();

            Console.WriteLine(METADATA_LOADED_NOTICE);

            MetadataObject metaObject = infoBase.Publications.Values.Where(p => p.Name == rmq).FirstOrDefault();

            if (metaObject == null)
            {
                Console.WriteLine(string.Format(PUBLICATION_IS_NOT_FOUND_WARNING, rmq));
                return;
            }

            if (!(metaObject is Publication publication))
            {
                Console.WriteLine(string.Format(PUBLICATION_IS_NOT_FOUND_WARNING, rmq));
                return;
            }

            PublicationDataMapper mapper = new PublicationDataMapper();

            mapper.UseDatabaseProvider(metadataService.DatabaseProvider);
            mapper.UseConnectionString(metadataService.ConnectionString);
            mapper.SelectSubscribers(publication);

            using (IConnection messageBroker = CreateConnection(settings.MessageBrokerSettings))
            {
                string queueName;
                foreach (Subscriber subscriber in publication.Subscribers)
                {
                    if (subscriber.IsMarkedForDeletion)
                    {
                        continue;
                    }
                    queueName = CreateQueueName(publication.Publisher.Code, subscriber.Code);
                    CreateExchangeAndQueue(messageBroker, queueName);
                    queueName = CreateQueueName(subscriber.Code, publication.Publisher.Code);
                    CreateExchangeAndQueue(messageBroker, queueName);
                }
            }
        }
Пример #15
0
        [TestMethod] public void ConfigureTopicExchange()
        {
            MessageProducerSettings settings = new MessageProducerSettings()
            {
                HostName     = "",
                VirtualHost  = "/",
                UserName     = "",
                Password     = "",
                PortNumber   = 5672,
                RoutingKey   = "",
                QueueName    = "",
                ExchangeName = ""
            };
            //Settings = Options.Create(settings);

            IConnectionFactory factory = new ConnectionFactory()
            {
                HostName    = settings.HostName,
                VirtualHost = settings.VirtualHost,
                UserName    = settings.UserName,
                Password    = settings.Password,
                Port        = settings.PortNumber
            };
            IConnection connection = factory.CreateConnection();

            IModel channel = connection.CreateModel();

            if (TryCreateExchange(channel, settings))
            {
                Console.WriteLine($"Exchange [{settings.ExchangeName}] declared successfully.");
            }
            else
            {
                DisposeResources(connection, channel); return;
            }

            //try
            //{
            //    QueueDeclareOk result = channel.QueueDeclarePassive(settings.QueueName);
            //    Console.WriteLine("Queue name = " + result.QueueName);
            //    Console.WriteLine("Message count = " + result.MessageCount.ToString());
            //    Console.WriteLine("Consumer count = " + result.ConsumerCount.ToString());
            //}
            //catch (Exception ex)
            //{
            //    Console.WriteLine($"Queue [{settings.QueueName}] not found.");
            //    Console.WriteLine(ex.Message);
            //}

            //Console.WriteLine();

            //try
            //{
            //    channel.ExchangeDeclarePassive(settings.ExchangeName);
            //    Console.WriteLine("Exchange name = " + settings.ExchangeName);
            //}
            //catch (Exception ex)
            //{
            //    Console.WriteLine($"Exchange [{settings.ExchangeName}] not found.");
            //    Console.WriteLine(ex.Message);
            //}

            //Console.WriteLine();

            //UnbindQueue(channel, settings);

            //Console.WriteLine();

            //DeleteQueue(channel, settings);

            //Console.WriteLine();

            //DeleteExchange(channel, settings);

            DisposeResources(connection, channel);
        }