Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este inicio rápido, usará la característica de agente MQTT de Azure Event Grid para admitir la mensajería mediante el protocolo MQTT. Los clientes, incluidos los dispositivos y las aplicaciones en la nube, pueden publicar y suscribirse a mensajes MQTT en temas jerárquicos flexibles para escenarios como la difusión a gran escala y el comando y el control.
En este artículo, usará la CLI de Azure para:
- Cree un espacio de nombres de Event Grid y habilite el intermediario MQTT.
- Cree subrecursos como clientes, grupos de clientes y espacios de temas.
- Conceda a los clientes acceso para publicar y suscribirse a espacios de temas.
- Publique y reciba mensajes MQTT.
Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
Prerrequisitos
- Si no está familiarizado con Event Grid, consulte la introducción a Event Grid antes de iniciar este tutorial.
- Registre el proveedor de recursos de Event Grid según los pasos descritos en Registro del proveedor de recursos de Event Grid.
- Asegúrese de que está abierto el puerto 8883 del firewall. En este tutorial se usa el protocolo MQTT, que se comunica a través del puerto 8883. Este puerto puede estar bloqueado en algunos entornos de red corporativos y educativos.
- Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Introducción a Azure Cloud Shell.
- Si prefieres ejecutar comandos de referencia CLI localmente, instala la CLI de Azure. Si se ejecuta en Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor de Docker. Para más información, consulte Ejecución de la CLI de Azure en un contenedor de Docker.
- Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando
az login
. Para finalizar el proceso de autenticación, siga los pasos que aparecen en el terminal. Para ver otras opciones de inicio de sesión, consulte Autenticación en Azure mediante la CLI de Azure. - Cuando se le solicite, instale la extensión de la CLI de Azure en el primer uso. Para más información sobre las extensiones, consulte Administración de extensiones de la CLI de Azure.
- Ejecute az version para ver la versión y las bibliotecas dependientes que están instaladas. Para actualizar a la versión más reciente, ejecute az upgrade.
- En este artículo se requiere la versión 2.53.1 o posterior de la CLI de Azure. Si usa Azure Cloud Shell, ya está instalada la versión más reciente.
- Necesita un certificado de cliente X.509 para generar la huella digital y autenticar la conexión de cliente.
- Revise los Comandos de la CLI del espacio de nombres de Event Grid.
Generación de un certificado de cliente de ejemplo y una huella digital
Si aún no tiene un certificado, puede crear un certificado de ejemplo mediante el step CLI. Considere la posibilidad de instalar manualmente para Windows.
Después de una instalación correcta mediante la CLI de Step, abra una ventana de terminal de comandos en la carpeta de perfil de usuario (Win+R type %USERPROFILE%
).
Para crear certificados raíz e intermedios, ejecute el siguiente comando. Recuerde la contraseña, que debe usar en el paso siguiente.
step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
Para crear un certificado para el cliente, use los archivos de entidad de certificación (CA) generados. Asegúrese de usar la ruta de acceso correcta para los archivos de certificado y secretos en el comando .
step certificate create client1-authnID client1-authnID.pem client1-authnID.key --ca .step/certs/intermediate_ca.crt --ca-key .step/secrets/intermediate_ca_key --no-password --insecure --not-after 2400h
Para ver la huella digital, ejecute el comando step.
step certificate fingerprint client1-authnID.pem
Creación de un espacio de nombres
Use este comando para crear un espacio de nombres. Actualiza el comando con el grupo de recursos y un nombre de espacio de nombres.
az eventgrid namespace create --resource-group {Resource Group} --name {Namespace Name} --topic-spaces-configuration "{state:Enabled}"
Para simplificar este inicio rápido, cree un espacio de nombres con propiedades mínimas. Para obtener más información sobre la red, la seguridad y la configuración en otras pestañas, consulte Creación y administración de espacios de nombres.
Creación de clientes
Use este comando para crear el cliente. Actualiza el comando con el grupo de recursos y un nombre de espacio de nombres.
az eventgrid namespace client create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {Client Name} --authentication-name client1-authnID --client-certificate-authentication "{validationScheme:ThumbprintMatch,allowed-thumbprints:[Client Thumbprint]}"
- Para simplificar este inicio rápido, use la coincidencia de huella digital para la autenticación. Para conocer los pasos sobre cómo usar la cadena de certificados de entidad de certificación X.509 para la autenticación de cliente, consulte Autenticación de cliente mediante la cadena de certificados.
- Para este ejercicio, use el grupo predeterminado
$all client
, que incluye todos los clientes del espacio de nombres. Para más información sobre cómo crear grupos de clientes personalizados mediante atributos de cliente, consulte Grupos de clientes.
Creación de espacios de temas
Use este comando para crear el espacio temático. Actualiza el comando con el grupo de recursos, el nombre del espacio de nombres y un nombre del espacio de temas.
az eventgrid namespace topic-space create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {Topicspace Name} --topic-templates ['contosotopics/topic1']
Crear vinculaciones de permisos
Usa el comando az eventgrid
a fin de crear el primer enlace de permisos para el permiso de publicador. Actualiza el comando con el grupo de recursos, el nombre del espacio de nombres y un nombre de enlace de permisos.
az eventgrid namespace permission-binding create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {Permission Binding Name} --client-group-name '$all' --permission publisher --topic-space-name {Topicspace Name}
Use este comando para crear el segundo enlace de permisos. Actualiza el comando con el grupo de recursos, el nombre del espacio de nombres y un nombre de enlace de permisos. Esta vinculación de permisos es para suscriptores.
az eventgrid namespace permission-binding create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {Name of second Permission Binding} --client-group-name '$all' --permission subscriber --topic-space-name {Topicspace Name}
Publicación y suscripción a mensajes MQTT
El código de ejemplo siguiente es un publicador de .NET sencillo que intenta conectarse y publicar en un espacio de nombres y se suscribe al tema MQTT. Puede modificar el código de sus requisitos y ejecutarlo en Visual Studio u otra herramienta de diseño.
Debe instalar el paquete MQTTnet (versión 4.1.4.563) desde NuGet para ejecutar este código. En Visual Studio, haga clic con el botón derecho en el nombre del proyecto en el Explorador de soluciones, vaya a Administrar paquetes NuGet y busque MQTTnet. Seleccione PAQUETE MQTTnet e instale.
Nota:
El código de ejemplo siguiente es solo para fines de demostración y no está pensado para su uso en producción.
Código de C# de ejemplo para conectar un cliente, publicar y suscribirse a un mensaje MQTT en un tema
Importante
Actualiza las rutas de acceso del archivo pem de certificado de cliente y clave en función de la ubicación de los archivos de certificado de cliente. Además, asegúrese de que el nombre de autenticación del cliente y la información del tema coincidan con la configuración.
using MQTTnet.Client;
using MQTTnet;
using System.Security.Cryptography.X509Certificates;
string hostname = "{Your Event Grid namespace MQTT hostname}";
string clientId = "client1-session1"; //client ID can be the session identifier. A client can have multiple sessions using username and clientId.
string x509_pem = @" client certificate cer.pem file path\client.cer.pem"; //Provide your client certificate .cer.pem file path
string x509_key = @"client certificate key.pem file path\client.key.pem"; //Provide your client certificate .key.pem file path
var certificate = new X509Certificate2(X509Certificate2.CreateFromPemFile(x509_pem, x509_key).Export(X509ContentType.Pkcs12));
var mqttClient = new MqttFactory().CreateMqttClient();
var connAck = await mqttClient!.ConnectAsync(new MqttClientOptionsBuilder()
.WithTcpServer(hostname, 8883)
.WithClientId(clientId)
.WithCredentials("client1-authnID", "") //use client authentication name in the username
.WithTls(new MqttClientOptionsBuilderTlsParameters()
{
UseTls = true,
Certificates = new X509Certificate2Collection(certificate)
})
.Build());
Console.WriteLine($"Client Connected: {mqttClient.IsConnected} with CONNACK: {connAck.ResultCode}");
mqttClient.ApplicationMessageReceivedAsync += async m => await Console.Out.WriteAsync($"Received message on topic: '{m.ApplicationMessage.Topic}' with content: '{m.ApplicationMessage.ConvertPayloadToString()}'\n\n");
var suback = await mqttClient.SubscribeAsync("contosotopics/topic1");
suback.Items.ToList().ForEach(s => Console.WriteLine($"subscribed to '{s.TopicFilter.Topic}' with '{s.ResultCode}'"));
while (true)
{
var puback = await mqttClient.PublishStringAsync("contosotopics/topic1", "hello world!");
Console.WriteLine(puback.ReasonString);
await Task.Delay(1000);
}
Puede replicar y modificar el mismo código para que varios clientes publiquen y se suscriban entre ellos.
Contenido relacionado
- Tutorial: Enrutamiento de mensajes MQTT a Azure Event Hubs mediante temas de espacio de nombres
- Tutorial: Enrutamiento de mensajes MQTT a Azure Functions mediante temas personalizados
Para obtener ejemplos de código, vaya a este repositorio de GitHub.