public void SendMQTTMessageToMultipleInstances(string tenantId, List <string> toInstanceIds, MQTTMessage message)
        {
            Task task = Task.Factory.StartNew(async() =>
            {
                MqttClientPublishResult res = null;

                var myMqttClient = _mqttClients.SingleOrDefault(c => (c.TenantId + "-" + c.TenantType).CompareTo(tenantId) == 0);

                message.ToInstancesIds = toInstanceIds;

                string jsonMessage = JsonConvert.SerializeObject(message);

                if (myMqttClient != null && myMqttClient.mqttClient.IsConnected)
                {
                    res = await myMqttClient.mqttClient.PublishAsync(myMqttClient.mqttTopic, jsonMessage, MyMQTTClient.MQTTQualityOfService);
                    InstanceHealthService.Health.MQTTMessagesSent += 1;
                }
                else
                {
                    if (MQTTSendQueue.CheckIfMQTTIsConfigured())
                    {
                        MQTTSendQueue.MessagesToSend.Add(new MQTTQueueMessage()
                        {
                            Topic         = myMqttClient.mqttTopic,
                            QueuedMessage = jsonMessage,
                            QoS           = MyMQTTClient.MQTTQualityOfService
                        });
                    }
                }

                return(res);
            });
        }
        private void BroadcastMyPeerInfo(string type = "INSTANCE_HEARTBEAT")
        {
            try
            {
                var myPeerMessage = GetPeerMessage("ALL", type);

                for (var t = 0; t < _mqttClients.Count; t++)
                {
                    var topicName   = _mqttClients[t].mqttTopic;
                    var jsonMessage = JsonConvert.SerializeObject(myPeerMessage);

                    while (!_mqttClients[t].mqttClient.IsConnected)
                    {
                        Thread.Sleep(10);
                    }

                    if (_mqttClients[t].mqttClient.IsConnected)
                    {
                        _mqttClients[t].mqttClient.PublishAsync(topicName, jsonMessage, MyMQTTClient.MQTTQualityOfService);
                        InstanceHealthService.Health.MQTTMessagesSent += 1;
                    }
                    else
                    {
                        if (MQTTSendQueue.CheckIfMQTTIsConfigured())
                        {
                            MQTTSendQueue.MessagesToSend.Add(new MQTTQueueMessage()
                            {
                                Topic         = topicName,
                                QueuedMessage = jsonMessage,
                                QoS           = MyMQTTClient.MQTTQualityOfService
                            });
                        }
                    }
                }
            }
            catch (Exception err)
            {
                Console.WriteLine("BroadcastMyPeerInfo ERROR : ", err.Message);
                Console.WriteLine("BroadcastMyPeerInfo Stack Trace : ", err.StackTrace);
            }
        }