コード例 #1
0
        public void CanStartMessageBroker()
        {
            var queueFactory = Substitute.For<IQueueFactory>();
            var messageBrokerConfig = new MessageBrokerConfig { RemoteQueueName = "MyRemoteQueueName", ServiceName = "TestBroker" };
            var entityConnectionConfig = new EntityConnectionConfig(new DatabaseConnectionConfig("(localdb)\\MSSQLLocalDB", "ABJA_Ripples"));
            var logger = NullLogger.Instance;
            var repositoryContextFactory = new RepositoryContextFactory(logger, entityConnectionConfig);
            var queueHandlerFactory = new QueueHandlerFactory(logger, queueFactory);
            var processInformation = new ProcessInformation();

            using (var messageBroker = new MessageBroker(logger, messageBrokerConfig, repositoryContextFactory, queueHandlerFactory, queueFactory, processInformation))
            {
                var cancellationToken = new CancellationToken();
                messageBroker.Start(cancellationToken);

                messageBroker.Handler(new MessageBusServiceHandshakeMessage
                {
                    ServiceName = "MyServiceName",
                    ServerName = "MyTestServer",
                    ReplyQueue = "MyQueue",
                    SendDateTime = DateTimeOffset.Now,
                    SubscribeHandlers = new List<SubscribeHandler> { new SubscribeHandler { Name = "MySubscriber", QueueName = "MyQueue", Durable = true, MessageType = "string", Topic = "MyTopic" } }
                });
            }
        }
コード例 #2
0
        public static void AddMessageBrokerConfigProvider(
            this IServiceCollection services,
            MessageBrokerConfig brokerConfig,
            ImmutableDictionary <string, Topic> topics
            )
        {
            var messageBrokerConfigProvider = new MessageBrokerConfigProvider(brokerConfig, topics);

            services.AddSingleton <IMessageBrokerConfigProvider>(messageBrokerConfigProvider);
        }
コード例 #3
0
        /// <summary>
        /// Build Message Broker
        /// </summary>
        /// <returns>The Message Bus</returns>
        public IMessageBroker Build()
        {
            var messageBrokerConfig = new MessageBrokerConfig
            {
                ServiceName     = _serviceName,
                RemoteQueueName = _remoteQueueName
            };

            var queueFactory        = new QueueFactory(_logger);
            var queueHandlerFactory = new QueueHandlerFactory(_logger, queueFactory);

            return(new MessageBroker(_logger, messageBrokerConfig, _repositoryContextFactory, queueHandlerFactory, queueFactory, _processInformation));
        }
コード例 #4
0
        public static void CreateTopicsOnMessageBroker(
            this IServiceCollection services,
            MessageBrokerConfig brokerConfig,
            ImmutableDictionary <string, Topic> topics
            )
        {
            var adminClientConfig = new AdminClientConfig
            {
                BootstrapServers = brokerConfig.Servers,
            };

            using var adminClient = new AdminClientBuilder(adminClientConfig).Build();

            var topicsToCreate =
                topics.Values.SelectMany(topic =>
            {
                return(new[]
                {
                    new TopicSpecification
                    {
                        Name = topic.Name
                    },
                    new TopicSpecification
                    {
                        Name = topic.DeadLetterQueueName
                    }
                });
            });

            var existingTopics      = adminClient.GetMetadata(TimeSpan.FromSeconds(30.0)).Topics;
            var finalTopicsToCreate =
                topicsToCreate.Where(topic =>
                                     !existingTopics.Any(existingTopic => existingTopic.Topic.Contains(topic.Name))
                                     ).ToImmutableArray();

            if (finalTopicsToCreate.Length > 0)
            {
                adminClient.CreateTopicsAsync(finalTopicsToCreate).Wait();
            }
        }
コード例 #5
0
 public Startup(IConfiguration configuration)
 {
     Configuration        = configuration;
     _messageBrokerConfig = ExtractMessageBrokerConfig(configuration);
     _topics = ExtractTopics(configuration);
 }
コード例 #6
0
 public MessageBrokerConfigProvider(MessageBrokerConfig config, IImmutableDictionary <string, Topic> topics)
 {
     _config = config;
     _topics = topics;
 }