コード例 #1
0
        static void Main(string[] args)
        {
            Console.WriteLine("Sender");
            Console.WriteLine("Press Enter to send data");
            Console.ReadLine();

            const string EXCHANGE_NAME = "MQQTExchange";

            ConnectionFactory factory = new ConnectionFactory();

            using (IConnection connection = factory.CreateConnection())
            {
                using (IModel channel = connection.CreateModel())
                {
                    factory.HostName = "localhost";

                    channel.ExchangeDeclare(EXCHANGE_NAME, ExchangeType.Fanout, true, false, null);

                    channel.QueueDeclare(queue: "MQQTQueue",
                                         durable: false,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);

                    MQQTMessage msg = new MQQTMessage
                    {
                        TimeStamp   = DateTime.UtcNow.ToString("s") + "Z",
                        EquipmentId = "1",
                        Tag         = "gasturbine/power",
                        Value       = "10.22"
                    };
                    string message = JsonConvert.SerializeObject(msg);
                    var    body    = Encoding.UTF8.GetBytes(message);

                    channel.BasicPublish(exchange: EXCHANGE_NAME,
                                         routingKey: "QB",
                                         basicProperties: null,
                                         body: body);
                    Console.WriteLine(" [x] Sent {0}", message);
                    Console.ReadLine();
                }
            }

            Console.WriteLine("Done Sending");
        }
コード例 #2
0
        public MQQTInterface()
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appSettings.json", optional: true, reloadOnChange: true);

            envconfiguration = builder.Build();



            // init the fields
            initFields();
            //init sites
            allSites = GetData <Site>("Site", Site.fieldIds);

            // init sensors
            allSensors = GetData <Sensor>("Sensor", Sensor.fieldIds);

            //init equipment Types
            allEquipmentType = GetData <EquipmentType>("EquipmentType", EquipmentType.fieldIds);

            //init equipments
            allEquipments = GetData <Equipment>("Equipment", Equipment.fieldIds);

            // init Alarms
            allAlarms = GetData <Alarm>("Alarm", Alarm.fieldIds);



            // init queue

            var factory = new ConnectionFactory()
            {
                HostName = envconfiguration.GetSection("rabbitMQServer").Value,
                //   UserName = envconfiguration.GetSection("rabbitMQUserName").Value,
                //  Password = envconfiguration.GetSection("rabbitMQPassword").Value,
                //   VirtualHost = envconfiguration.GetSection("rabbitMQHost").Value
            };


            IConnection connection = null;
            IModel      channel    = null;

            try
            {
                var connected      = false;
                var connRetryCount = 0;
                while (!connected && connRetryCount < 20)
                {
                    try
                    {
                        connRetryCount++;
                        connection = factory.CreateConnection();
                        connected  = true;
                        channel    = connection.CreateModel();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message + ex.StackTrace);
                        Console.WriteLine("Sleeping for 5 sec before retry");
                        Thread.Sleep(5000);
                    }
                }
                if (connRetryCount >= 20)
                {
                    Console.WriteLine("Exhausted retry count while trying to connect to rmq");
                    return;
                }

                Dictionary <string, object> qargs = new Dictionary <string, object>();

                channel.ExchangeDeclare(envconfiguration.GetSection("DataExchange").Value, ExchangeType.Fanout, true, false, null);


                channel.QueueDeclare(queue: envconfiguration.GetSection("DBStoreQueue").Value, //MQ name where trend data will be posted
                                     durable: true,
                                     exclusive: false,
                                     autoDelete: false,
                                     arguments: qargs);



                channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);

                var consumer = new EventingBasicConsumer(channel);

                consumer.Received += (model, ea) =>
                {
                    if (ea.Body.Length > 0)
                    {
                        var         body    = ea.Body;
                        String      message = "";
                        MQQTMessage rawData = null;;
                        try
                        {
                            try
                            {
                                message = Encoding.UTF8.GetString(body.ToArray());
                            }
                            catch
                            {
                                throw new Exception("Unable to decode message");
                            }

                            try
                            {
                                rawData = JsonConvert.DeserializeObject <MQQTMessage>(message);

                                Equipment exp = allEquipments.Where(u => u.Record_ID.ToString().Equals(rawData.EquipmentId)).FirstOrDefault();

                                if (exp != null)
                                {
                                    Sensor sx = allSensors.Where(u => u.Tag.Equals(rawData.Tag)).FirstOrDefault();
                                    if (sx != null)
                                    {
                                        DateTime dt   = DateTime.Parse(rawData.TimeStamp);
                                        DateTime myDt = DateTime.SpecifyKind(dt, DateTimeKind.Utc);
                                        Alarm    al   = allAlarms.Where(u => u.Related_Sensor.Equals(sx.Record_ID.ToString())).FirstOrDefault();

                                        Console.WriteLine("Writing Data for " + exp.Equipment_Name + " - " + myDt.ToString("s"));

                                        InsertMQQTSensorData(exp, sx, myDt, al, rawData.Value);
                                    }
                                }
                            }
                            catch
                            {
                                throw new Exception("Unable to parse message");
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                    }
                };

                String consumerTab =
                    channel.BasicConsume(queue: envconfiguration.GetSection("DBStoreQueue").Value,
                                         autoAck: true,
                                         consumer: consumer);

                channel.QueueBind(queue: envconfiguration.GetSection("DBStoreQueue").Value,
                                  exchange: envconfiguration.GetSection("DataExchange").Value,
                                  routingKey: "QB");
                Console.WriteLine("Listening press ENTER to quit");
                Console.ReadLine();

                channel.QueueUnbind(queue: envconfiguration.GetSection("DBStoreQueue").Value,
                                    exchange: envconfiguration.GetSection("DataExchange").Value, "QB", null);
            }
            catch (Exception conException)
            {
                Console.WriteLine("Error connecting to required service.", conException);
                Console.WriteLine(conException.Message);
            }
        }