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