GnatMQ nel Cloud : un broker MQTT su Microsoft Azure

Nel corso di questo post, vedremo come sia semplice eseguire GnatMQ, il broker MQTT per il .Net Framework, nel Cloud utilizzando la piattaforma Microsoft Azure. L’esecuzione del broker può essere avviata attraverso un Worker Role che rientra tra i “Cloud Services” offerti da Microsoft.

Creazione del Cloud Service

Nel “Server Explorer”, clicchiamo con il tasto destro su “Windows Azure” e su “Connect to Windows Azure…” ed eseguiamo il login utilizzando le nostre credenziali di accesso di Azure (quelle che usiamo nel management portal online).

0825.01_thumb_4E4E2CA1

Il “Server Explorer” si aggiorna e visualizza tutti i servizi “Windows Azure” attualmente attivi con il nostro account (Cloud Services per web role e worker role, Service Bus con relativi namespace, Virtual Machines e così via).

4527.02_thumb_22312FB0

Poiché il nostro obiettivo è quello di eseguire il broker GnatMQ in un worker role, dobbiamo creare un nuovo “Cloud Services”, cliccando con il tasto destro su di esso e selezionando “Create Cloud Service…”. Selezioniamo la subscription a cui associare il nuovo servizio, il nome e la regione in cui esso sarà eseguito.

7178.03_thumb_131A50D6

La creazione di un nuovo “Cloud Services” può essere eseguita anche online utilizzando il management portal nella sezione “Compute”, “Cloud Service” e “Quick Create”; le informazioni richieste sono le medesime di Visual Studio a meno della sottoscrizione che è implicita avendo fatto il login online.

5826.04_thumb_27336D5F

Creazione del Worker Role

Utilizzando Visual Studio, creiamo un nuovo progetto di tipo “Windows Azure Cloud Service” incluso nel template “Cloud”, assegnandogli un nome (es. AzureGnatMQ).

8750.05_thumb_4609E13D

Un “Cloud Service” può ospitare uno o più servizi tra Web Role, per applicazioni ASP.NET e servizi WCF, e Worker Role tipicamente per operazioni di backend talvolta strettamente legate anche al Service Bus. Nel nostro caso, aggiungiamo solo un Worker Role assegnandogli il nome GnatMQWorkerRole e creiamo il corrispondente progetto.

7673.06_thumb_1744289B

La prima operazione da fare consiste nello scaricare da CodePlex i sorgenti del broker GnatMQ in modo da aggiungere il progetto MqttBroker all’interno della solution appena generata e successivamente come reference al progetto GnatMQWorkerRole; nulla vieta di compilare il broker separatamente e poi aggiungere direttamente un riferimento all’assembly.

La solution AzureGnatMQ sarà costituita dai seguenti progetti :

  • AzureGnatMQ con tutte le impostazioni relative al “Cloud Service” necessarie per il deploy su Azure;
  • GnatMQWorkerRole con il Worker Role che dovrà ospitare il broker MQTT;
  • MqttBroker che implementa GnatMQ;

1616.07_thumb_08997CB6

GnatMQ in esecuzione nel Worker Role

Apriamo il file sorgente relativo al Worker Role e creiamo un campo privato di tipo MqttBroker; nel metodo OnStart() istanziamo la classe MqttBroker ed eseguiamo su di essa il metodo Start(). Con questi due semplicissimi step abbiamo creato ed avviato l’esecuzione di GnatMQ nel Worker Role !

public override bool OnStart()
{
 // Set the maximum number of concurrent connections
 ServicePointManager.DefaultConnectionLimit = 12;

 // For information on handling configuration changes
 // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

 this.broker = new MqttBroker();
 this.broker.Start();

 return base.OnStart();
}

Come sappiamo, il broker MQTT utilizza la porta 1883 per accettare le connessioni TCP in ingresso (non SSL); per questo motivo, dobbiamo renderlo accessibile dall’esterno aggiungendo un EndPoint al Worker Role.

Per farlo, apriamo le proprietà del Worker Role stesso (non il progetto ma l’istanza che si trova nella sottocartella “Roles” di “AzureGnatMQ”) e la tab “Endpoints”. Aggiungiamo un nuovo EndPoint con le seguenti caratteristiche :

  • nome “MQTT” (oppure uno qualsiasi);
  • di tipo Input;
  • protocollo TCP;
  • porta pubblica 1883;

0825.08_thumb_6E591391

Il broker è a tutti gli effetti pronto per essere compilato e distribuito sul Cloud. Per verificarne il funzionamento in locale, possiamo lanciarlo in esecuzione grazie all’emulatore di Windows Azure.

Pubblicazione su Azure

La pubblicazione su Azure è alquanto semplice grazie all’integrazione con Visual Studio (anche se potremmo eseguirla dal management portal online). Clicchiamo con il tasto destro sul progetto “AzureGnatMQ” (relativo al Cloud Service) e poi su “Publish”. Dobbiamo scegliere la sottoscrizione da utilizzare, il relativo cloud service in cui far eseguire il worker role, l’ambiente (produzione o staging) e la configurazione da utilizzare.

8640.09_thumb_0D9BBA65

La pubblicazione viene eseguita nel giro di qualche minuto e possiamo seguirne lo stato di avanzamento nella finestra “Windows Azure Activity Log”.

6406.10_thumb_21B4D6EE

Una volta terminata la pubblicazione, il broker MQTT sarà disponibile online ed accessibile all’indirizzo <name>.cloudapp.net oppure al VIP (Virtual IP Address) assegnato da Azure e reperibile nella dashboard del Cloud Service.

2308.11_thumb_6BCFE1D3

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s