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" } } }); } }
public static void AddMessageBrokerConfigProvider( this IServiceCollection services, MessageBrokerConfig brokerConfig, ImmutableDictionary <string, Topic> topics ) { var messageBrokerConfigProvider = new MessageBrokerConfigProvider(brokerConfig, topics); services.AddSingleton <IMessageBrokerConfigProvider>(messageBrokerConfigProvider); }
/// <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)); }
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(); } }
public Startup(IConfiguration configuration) { Configuration = configuration; _messageBrokerConfig = ExtractMessageBrokerConfig(configuration); _topics = ExtractTopics(configuration); }
public MessageBrokerConfigProvider(MessageBrokerConfig config, IImmutableDictionary <string, Topic> topics) { _config = config; _topics = topics; }