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); } }