public Task ConnectConsumerFromOtherNode(NotifyConsumerConnectionDetails notifyConsumerConnectionDetails) { string consumerIdOnRepo = $"{notifyConsumerConnectionDetails.Tenant}{notifyConsumerConnectionDetails.Product}{notifyConsumerConnectionDetails.Component}{notifyConsumerConnectionDetails.Topic}|{notifyConsumerConnectionDetails.ConsumerName}"; var consumerInRepo = _consumerHubRepository.GetConsumerById(consumerIdOnRepo); if (consumerInRepo == null) { consumerInRepo = new Consumer() { ConsumerName = notifyConsumerConnectionDetails.ConsumerName, Tenant = notifyConsumerConnectionDetails.Tenant, Product = notifyConsumerConnectionDetails.Product, Component = notifyConsumerConnectionDetails.Component, ConsumerSettings = new ConsumerSettings() { InitialPosition = notifyConsumerConnectionDetails.InitialPosition }, IsLocal = false, SubscriptionType = notifyConsumerConnectionDetails.SubscriptionType, Topic = notifyConsumerConnectionDetails.Topic }; _consumerHubRepository.AddConsumer(consumerIdOnRepo, consumerInRepo); } _consumerHubRepository.AddExternalConsumerConnection(consumerIdOnRepo); return(Task.CompletedTask); }
public async Task NotifyNodesForConsumerConnection(NotifyConsumerConnectionDetails obj) { if (obj.ConnectionType == ConnectionType.Connected) { await consumerHubService.ConnectConsumerFromOtherNode(obj); } else { await consumerHubService.DisconnectConsumerFromOtherNode(obj); } }
public Task DisconnectConsumerFromOtherNode(NotifyConsumerConnectionDetails notifyConsumerConnectionDetails) { string consumerIdOnRepo = $"{notifyConsumerConnectionDetails.Tenant}{notifyConsumerConnectionDetails.Product}{notifyConsumerConnectionDetails.Component}{notifyConsumerConnectionDetails.Topic}|{notifyConsumerConnectionDetails.ConsumerName}"; var externalConsumer = _consumerHubRepository.GetConsumerById(consumerIdOnRepo); if (externalConsumer != null) { // remove external connection _consumerHubRepository.RemoveExternalConsumerConnection(consumerIdOnRepo); if (externalConsumer.IsLocal == false) { _consumerHubRepository.RemoveConsumer(consumerIdOnRepo); } } return(Task.CompletedTask); }