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);
        }
Beispiel #2
0
 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);
        }