public override async Task OnMqttDataChanged(EnumQueueMode mode, BoxMqttApplicationMessage applicationMessage)
        {
            try
            {
                //    如果是删除的触发事件,则不需处理
                if (mode == EnumQueueMode.Dequeue)
                {
                    return;
                }

                //    将获取到的数据进行转换为监听数据,然后推送到kafka
                var messageStr  = Encoding.UTF8.GetString(applicationMessage.Payload);
                var monitorData = JsonSerializer.Deserialize <FBoxMonitorDataDto>(messageStr);

                var dmonDataConsumerOutputs = monitorData.FBoxMonitorDataInfos.Select(data =>
                                                                                      new KafkaMonitorDataOutput
                {
                    State     = data.Value == null || string.IsNullOrWhiteSpace(data.Value.ToString()) ? 1 : 0,
                    DmonName  = data.Name,
                    Value     = data.Value,
                    TimeStamp = monitorData.Time,
                    BoxBo     = applicationMessage.BoxNo,
                    MqttName  = MqttServerType.FBoxMqtt
                }).ToArray();
                await _kafkaProducerManager.PushDataAsync(_kafkaSetting.MonitorDataTopic, applicationMessage.BoxNo,
                                                          dmonDataConsumerOutputs);

                //    去除当前消费掉的元素
                _messageQueueManager.Dequeue(applicationMessage.TopicName);
            }
            catch (Exception e)
            {
                _logger.LogError(e.Message);
            }
        }
Esempio n. 2
0
 public override Task OnMqttDataChanged(EnumQueueMode mode, BoxMqttApplicationMessage applicationMessage)
 {
     throw new System.NotImplementedException();
 }
Esempio n. 3
0
 /// <summary>
 ///     消息处理者
 /// </summary>
 /// <param name="action">
 ///     当前消息来源方式
 /// </param>
 /// <param name="applicationMessage"></param>
 /// <returns></returns>
 public abstract Task OnMqttDataChanged(EnumQueueMode mode, BoxMqttApplicationMessage applicationMessage);
 public void Enqueue(string key, BoxMqttApplicationMessage message)
 {
     AddQueueMessageOfIsNull(key);
     _messageQueueDictionary[key].Enqueue(message);
 }