Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de Fabric, Power BI y SQL más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
En este artículo de inicio rápido se muestra cómo enviar mensajes a un tema de Service Bus y recibir mensajes de una suscripción a ese tema mediante la biblioteca Azure.Messaging.ServiceBus de .NET.
En este inicio rápido, hará lo siguiente:
Nota
En este inicio rápido se proporcionan instrucciones detalladas para implementar un escenario sencillo de envío de un lote de mensajes a un tema de Service Bus y recepción de esos mensajes desde una suscripción del tema. Para obtener más ejemplos sobre otros escenarios avanzados, vea los ejemplos de .NET de Service Bus en GitHub.
Si no está familiarizado con el servicio, consulte la información general sobre Service Bus antes de seguir este artículo de inicio rápido.
latest
. Si usa Visual Studio, las versiones anteriores a Visual Studio 2022 no son compatibles con las herramientas necesarias para compilar proyectos de C# 10.Para empezar a usar entidades de mensajería de Service Bus en Azure, primero hay que crear un espacio de nombres con un nombre que sea único en Azure. Un espacio de nombres proporciona un contenedor de ámbito para los recursos de Service Bus (colas, temas, etc.) que están dentro de la aplicación.
Para crear un espacio de nombres:
Inicie sesión en Azure Portal.
Vaya a la página Todos los servicios.
En la barra de navegación izquierda, seleccione Integration en la lista de categorías, mantenga el mouse sobre Service Bus, y a continuación, seleccione el botón + en el mosaico de Service Bus.
En la pestaña Datos básicos de la página Crear espacio de nombres, siga estos pasos:
En Suscripción, elija la suscripción de Azure en la que se va a crear el espacio de nombres.
Para Grupo de recursos, elija un grupo de recursos existente o cree uno nuevo.
Escriba nombre para el espacio de nombres. El nombre del espacio de nombres debe cumplir las siguientes convenciones de nomenclatura:
-
.-sb
ni -mgmt
.En Ubicación, elija la región donde se debe hospedar el espacio de nombres.
En Plan de tarifa, seleccione el plan de tarifa (Básico, Estándar o Prémium) del espacio de nombres. Para este inicio rápido, seleccione Estándar.
Si selecciona el nivel Premium, seleccione si puede habilitar la replicación geográfica para el espacio de nombres. La característica Replicación geográfica garantiza que los metadatos y los datos de un espacio de nombres se repliquen continuamente desde una región primaria a una o varias regiones secundarias.
Importante
Si desea usar temas y suscripciones, elija Estándar o Premium. El plan de tarifas Básico no admite temas o suscripciones.
Si ha seleccionado el plan de tarifa Prémium, especifique el número de unidades de mensajería. El plan Premium proporciona aislamiento de recursos en el nivel de CPU y memoria para que cada carga de trabajo se ejecute de forma aislada. Este contenedor de recursos se llama unidad de mensajería. A cada espacio de nombres prémium se le asigna al menos una unidad de mensajería. Puede seleccionar 1, 2, 4, 8 o 16 unidades de mensajería para cada espacio de nombres prémium de Service Bus. Para más información, consulte Mensajería prémium de Service Bus.
En la parte inferior de la página, seleccione Revisar y crear.
En la página Revisar y crear, examine la configuración y seleccione Crear.
Una vez que la implementación del recurso sea correcta, seleccione Ir al recurso en la página de implementación.
Verá la página principal del espacio de nombres de Service Bus.
En la página Espacio de nombres de Service Bus, expanda Entidades en el menú de navegación a la izquierda y seleccione Temas en el menú de la izquierda.
En la barra de herramientas, seleccione + Tema.
Escriba un nombre para el tema. Deje las restantes opciones con sus valores predeterminados.
Seleccione Crear.
Seleccione el tema que creó en la sección anterior.
En la página Tema de Service Bus, seleccione Suscripción en la barra de herramientas.
En la página Crear suscripción, siga estos pasos:
Escriba S1 como nombre de la suscripción.
Luego, seleccione Create (Crear) para guardar la suscripción.
En este inicio rápido, se muestran dos maneras de conectarse a Azure Service Bus: sin contraseña y con la cadena de conexión.
La primera opción muestra cómo usar la entidad de seguridad en Microsoft Entra ID y el control de acceso basado en rol (RBAC) para conectarse a un espacio de nombres de Service Bus. No es necesario preocuparse por tener una cadena de conexión codificada de forma rígida en el código, en un archivo de configuración o en un almacenamiento seguro, como Azure Key Vault.
La segunda opción muestra cómo usar una cadena de conexión para conectarse a un espacio de nombres de Service Bus. Si no está familiarizado con Azure, puede que le resulte más fácil la opción de la cadena de conexión. Se recomienda usar la opción sin contraseña en aplicaciones reales y entornos de producción. Para más información, consulte Autenticación y autorización. También puede obtener más información sobre la autenticación sin contraseña en la página de información general.
Al desarrollar localmente, asegúrese de que la cuenta de usuario que se conecta a Azure Service Bus tenga los permisos correctos. Necesitará el rol propietario de datos Azure Service Bus para enviar y recibir mensajes. Para asignarse este rol, necesitará el rol Administrador de accesos de usuarios, u otro que incluya la acción Microsoft.Authorization/roleAssignments/write
. Puede asignar roles RBAC de Azure a un usuario mediante Azure Portal, la CLI de Azure o Azure PowerShell. Puede obtener más información sobre los ámbitos disponibles para las asignaciones de roles en la página de información general del ámbito.
En el ejemplo siguiente se asigna el rol Azure Service Bus Data Owner
a la cuenta de usuario, que proporciona un acceso completo a los recursos de Azure Service Bus. En un escenario real, siga el Principio de privilegios mínimos para conceder a los usuarios solo los permisos mínimos necesarios para un entorno de producción más seguro.
En el caso de Azure Service Bus, la administración de los espacios de nombres y de todos los recursos relacionados mediante Azure Portal y la API de administración de recursos de Azure, ya se ha protegido mediante el modelo de Azure RBAC. Azure proporciona los siguientes roles integrados de Azure para autorizar el acceso a un espacio de nombres de Service Bus:
Si desea crear un rol personalizado, consulte Derechos necesarios para las operaciones de Service Bus.
Asigne el rol Propietario de datos de Azure Service Bus al nombre de usuario de Microsoft Entra en el nivel de espacio de nombres de Service Bus. Permitirá que una aplicación que se ejecuta en el contexto de la cuenta de usuario envíe mensajes a una cola o tema y reciba mensajes de la suscripción de una cola o tema.
Importante
En la mayoría de los casos, la asignación de roles tardará un minuto o dos en propagarse en Azure. En ocasiones excepcionales, puede tardar hasta ocho minutos. Si recibe errores de autenticación al ejecutar por primera vez el código, espere unos instantes e inténtelo de nuevo.
Si no tiene abierta la página Espacio de nombres de Service Bus en Azure-Portal, busque el espacio de nombres de Service Bus mediante la barra de búsqueda principal o el panel de navegación izquierdo.
En la página de información general, seleccione Control de acceso (IAM) en el menú de la izquierda.
En la página Control de acceso (IAM), seleccione la pestaña Asignación de roles.
Seleccione + Agregar en el menú superior y, a continuación, Agregar asignación de roles en el menú desplegable resultante.
Puede usar el cuadro de búsqueda para filtrar los resultados por el rol deseado. En este ejemplo, busque Azure Service Bus Data Owner
y seleccione el resultado coincidente. Después, haga clic en Siguiente.
En la pestaña Asignar acceso a, seleccione Usuario, grupo o entidad de servicio y, a continuación, elija + Seleccionar miembros.
En el cuadro de diálogo, busque el nombre de usuario de Microsoft Entra (normalmente su dirección de correo electrónico de user@domain) y, a continuación, elija Seleccionar en la parte inferior del cuadro de diálogo.
Seleccione Revisar y asignar para ir a la página final y, a continuación, de nuevo Revisar y asignar para completar el proceso.
Puede autorizar el acceso al espacio de nombres de Service Bus siguiendo estos pasos:
Inicie Visual Studio. Si aparece la ventana Introducción, seleccione el vínculo Continuar sin código en el panel derecho.
Seleccione el botón Iniciar sesión en la parte superior derecha de Visual Studio.
Inicie sesión con la cuenta de Microsoft Entra a la que asignó un rol anteriormente.
En esta sección se muestra cómo crear una aplicación de consola de .NET para enviar mensajes a una tema de Service Bus.
Nota
En este inicio rápido se proporcionan instrucciones detalladas para implementar un escenario sencillo de envío de un lote de mensajes a un tema de Service Bus y recepción de esos mensajes desde una suscripción del tema. Para obtener más ejemplos sobre otros escenarios avanzados, vea los ejemplos de .NET de Service Bus en GitHub.
Seleccione C# como lenguaje de programación.
Seleccione Consola como tipo de aplicación.
Seleccione Aplicación de consola en la lista de resultados.
Después, seleccione Siguiente.
Seleccione Herramientas>Administrador de paquetes NuGet>Consola del Administrador de paquetes en el menú.
Ejecute el siguiente comando para instalar el paquete NuGet Azure.Messaging.ServiceBus.
Install-Package Azure.Messaging.ServiceBus
Ejecute el siguiente comando para instalar el paquete NuGet Azure.Identity.
Install-Package Azure.Identity
Reemplace el contenido de Program.cs por el código siguiente. Los pasos importantes se describen en esta sección, con información adicional en los comentarios de código.
DefaultAzureCredential
.
DefaultAzureCredential
detecta y usa automáticamente las credenciales del inicio de sesión de Visual Studio para autenticarse en Azure Service Bus.ServiceBusClient
para crear un objeto ServiceBusSender para el tema específico de Service Bus.Importante
Actualice los valores de marcador de posición (<NAMESPACE-NAME>
y <TOPIC-NAME>
) en el fragmento de código con los nombres del espacio de nombres y el tema de Service Bus.
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;
using Azure.Identity;
// the client that owns the connection and can be used to create senders and receivers
ServiceBusClient client;
// the sender used to publish messages to the topic
ServiceBusSender sender;
// number of messages to be sent to the topic
const int numOfMessages = 3;
// The Service Bus client types are safe to cache and use as a singleton for the lifetime
// of the application, which is best practice when messages are being published or read
// regularly.
//TODO: Replace the "<NAMESPACE-NAME>" and "<TOPIC-NAME>" placeholders.
client = new ServiceBusClient(
"<NAMESPACE-NAME>.servicebus.windows.net",
new DefaultAzureCredential());
sender = client.CreateSender("<TOPIC-NAME>");
// create a batch
using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
for (int i = 1; i <= numOfMessages; i++)
{
// try adding a message to the batch
if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}")))
{
// if it is too large for the batch
throw new Exception($"The message {i} is too large to fit in the batch.");
}
}
try
{
// Use the producer client to send the batch of messages to the Service Bus topic
await sender.SendMessagesAsync(messageBatch);
Console.WriteLine($"A batch of {numOfMessages} messages has been published to the topic.");
}
finally
{
// Calling DisposeAsync on client types is required to ensure that network
// resources and other unmanaged objects are properly cleaned up.
await sender.DisposeAsync();
await client.DisposeAsync();
}
Console.WriteLine("Press any key to end the application");
Console.ReadKey();
Compile el proyecto y asegúrese de que no hay errores.
Ejecute el programa y espere el mensaje de confirmación.
A batch of 3 messages has been published to the topic
Importante
En la mayoría de los casos, la asignación de roles tardará uno o dos minutos en propagarse en Azure. En raras ocasiones, puede tardar hasta ocho minutos. Si recibe errores de autenticación al ejecutar por primera vez el código, espere unos instantes e inténtelo de nuevo.
En Azure Portal, haga lo siguiente:
Vaya al espacio de nombres de Service Bus.
En la página Información general, en el panel inferior central, cambie a la pestaña Temas y seleccione el tema de Service Bus. En el ejemplo siguiente, es mytopic
.
En la página Tema de Service Bus, en el gráfico Mensajes de la sección Métricas inferior, puede ver que hay tres mensajes entrantes para la cola. Si no ve el valor, espere unos minutos y actualice la página para ver el gráfico actualizado.
Seleccione la suscripción en el panel inferior. En el ejemplo siguiente, es S1. En la página Suscripción de Service Bus, verá el Recuento de mensajes activos como 3. La suscripción ha recibido los tres mensajes que ha enviado al tema, pero ningún receptor los ha recogido todavía.
En esta sección, creará una aplicación de consola de .NET que recibe mensajes de la suscripción al tema de Service Bus.
Nota
En este inicio rápido se proporcionan instrucciones detalladas para implementar un escenario sencillo de envío de un lote de mensajes a un tema de Service Bus y recepción de esos mensajes desde una suscripción del tema. Para obtener más ejemplos sobre otros escenarios avanzados, vea los ejemplos de .NET de Service Bus en GitHub.
Seleccione Herramientas>Administrador de paquetes NuGet>Consola del Administrador de paquetes en el menú.
Seleccione SubscriptionReceiver en la lista desplegable Proyecto predeterminado.
Ejecute el comando siguiente para instalar el paquete NuGet Azure.Messaging.ServiceBus.
Install-Package Azure.Messaging.ServiceBus
Ejecute el siguiente comando para instalar el paquete NuGet Azure.Identity.
Install-Package Azure.Identity
En esta sección, agregará código para recuperar mensajes de la suscripción.
Reemplace el contenido existente de Program.cs
con las siguientes propiedades y métodos:
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;
using Azure.Identity;
// the client that owns the connection and can be used to create senders and receivers
ServiceBusClient client;
// the processor that reads and processes messages from the subscription
ServiceBusProcessor processor;
// handle received messages
async Task MessageHandler(ProcessMessageEventArgs args)
{
string body = args.Message.Body.ToString();
Console.WriteLine($"Received: {body} from subscription.");
// complete the message. messages is deleted from the subscription.
await args.CompleteMessageAsync(args.Message);
}
// handle any errors when receiving messages
Task ErrorHandler(ProcessErrorEventArgs args)
{
Console.WriteLine(args.Exception.ToString());
return Task.CompletedTask;
}
Anexar el siguiente código al final de Program.cs
.
DefaultAzureCredential
.
DefaultAzureCredential
detecta y usa automáticamente las credenciales del inicio de sesión de Visual Studio para autenticarse en Azure Service Bus.ServiceBusClient
para crear un objeto ServiceBusProcessor para el tema de Service Bus especificada.ServiceBusProcessor
.ServiceBusProcessor
.ServiceBusProcessor
.Importante
Actualice los valores de marcador de posición (<NAMESPACE-NAME>
, <TOPIC-NAME>
y <SUBSCRIPTION-NAME>
) en el fragmento de código con los nombres del espacio de nombres, el tema y la suscripción de Service Bus.
Para más información, consulte los comentarios del código.
// The Service Bus client types are safe to cache and use as a singleton for the lifetime
// of the application, which is best practice when messages are being published or read
// regularly.
//
// Create the clients that we'll use for sending and processing messages.
// TODO: Replace the <NAMESPACE-NAME> placeholder
client = new ServiceBusClient(
"<NAMESPACE-NAME>.servicebus.windows.net",
new DefaultAzureCredential());
// create a processor that we can use to process the messages
// TODO: Replace the <TOPIC-NAME> and <SUBSCRIPTION-NAME> placeholders
processor = client.CreateProcessor("<TOPIC-NAME>", "<SUBSCRIPTION-NAME>", new ServiceBusProcessorOptions());
try
{
// add handler to process messages
processor.ProcessMessageAsync += MessageHandler;
// add handler to process any errors
processor.ProcessErrorAsync += ErrorHandler;
// start processing
await processor.StartProcessingAsync();
Console.WriteLine("Wait for a minute and then press any key to end the processing");
Console.ReadKey();
// stop processing
Console.WriteLine("\nStopping the receiver...");
await processor.StopProcessingAsync();
Console.WriteLine("Stopped receiving messages");
}
finally
{
// Calling DisposeAsync on client types is required to ensure that network
// resources and other unmanaged objects are properly cleaned up.
await processor.DisposeAsync();
await client.DisposeAsync();
}
Este es el aspecto que debería tener Program.cs
:
using System;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;
using Azure.Identity;
// the client that owns the connection and can be used to create senders and receivers
ServiceBusClient client;
// the processor that reads and processes messages from the subscription
ServiceBusProcessor processor;
// handle received messages
async Task MessageHandler(ProcessMessageEventArgs args)
{
string body = args.Message.Body.ToString();
Console.WriteLine($"Received: {body} from subscription.");
// complete the message. messages is deleted from the subscription.
await args.CompleteMessageAsync(args.Message);
}
// handle any errors when receiving messages
Task ErrorHandler(ProcessErrorEventArgs args)
{
Console.WriteLine(args.Exception.ToString());
return Task.CompletedTask;
}
// The Service Bus client types are safe to cache and use as a singleton for the lifetime
// of the application, which is best practice when messages are being published or read
// regularly.
//
// Create the clients that we'll use for sending and processing messages.
// TODO: Replace the <NAMESPACE-NAME> placeholder
client = new ServiceBusClient(
"<NAMESPACE-NAME>.servicebus.windows.net",
new DefaultAzureCredential());
// create a processor that we can use to process the messages
// TODO: Replace the <TOPIC-NAME> and <SUBSCRIPTION-NAME> placeholders
processor = client.CreateProcessor("<TOPIC-NAME>", "<SUBSCRIPTION-NAME>", new ServiceBusProcessorOptions());
try
{
// add handler to process messages
processor.ProcessMessageAsync += MessageHandler;
// add handler to process any errors
processor.ProcessErrorAsync += ErrorHandler;
// start processing
await processor.StartProcessingAsync();
Console.WriteLine("Wait for a minute and then press any key to end the processing");
Console.ReadKey();
// stop processing
Console.WriteLine("\nStopping the receiver...");
await processor.StopProcessingAsync();
Console.WriteLine("Stopped receiving messages");
}
finally
{
// Calling DisposeAsync on client types is required to ensure that network
// resources and other unmanaged objects are properly cleaned up.
await processor.DisposeAsync();
await client.DisposeAsync();
}
Compile el proyecto y asegúrese de que no hay errores.
Ejecute la aplicación del destinatario. Debería ver los mensajes recibidos. Presione cualquier tecla para detener el receptor y la aplicación.
Wait for a minute and then press any key to end the processing
Received: Message 1 from subscription: S1
Received: Message 2 from subscription: S1
Received: Message 3 from subscription: S1
Stopping the receiver...
Stopped receiving messages
Vuelva a consultar el portal.
En la página Tema de Service Bus, en el gráfico Mensajes, podrá ver tres mensajes entrantes y tres mensajes salientes. Si no ve estos números, espere unos minutos y actualice la página para ver el gráfico actualizado.
En la página Service Bus Subscription (Suscripción de Service Bus), verá el Recuento de mensajes activos como cero. Esto se debe a que un receptor ha recibido mensajes de esta suscripción y ha completado los mensajes.
Consulte la documentación y los ejemplos siguientes:
Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de Fabric, Power BI y SQL más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoy