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 artículo se proporcionan instrucciones paso a paso para un escenario sencillo de enviar mensajes a una cola de Service Bus y recibirlos. Puede encontrar ejemplos precompilados de JavaScript y TypeScript para Azure Service Bus en el repositorio de Azure SDK para Python en GitHub.
En esta guía de inicio rápido:
Creación de un espacio de nombres de Service Bus mediante Azure Portal
Creación de una cola de Service Bus mediante Azure Portal.
Escriba código de Python para usar el paquete azure-servicebus para:
- Enviar un conjunto de mensajes a la cola.
- Recibir esos mensajes de la cola.
Si no está familiarizado con el servicio, consulte Introducción a Service Bus antes de empezar.
Requisitos previos
Suscripción a Azure. Para completar este inicio rápido, necesita una cuenta de Azure. Puede activar los créditos mensuales de Azure para suscriptores de Visual Studio o registrarse para obtener una cuenta gratuita.
Python 3.8 o versiones posteriores.
Para usar este inicio rápido con su propia cuenta de Azure:
- Instale la CLI de Azure, que proporciona la autenticación sin contraseña en la máquina del desarrollador.
- Iniciar sesión con su cuenta de Azure en el terminal o en el símbolo del sistema con
az login
. - Usar la misma cuenta al agregar el rol de datos adecuado al recurso.
- Ejecutar el código en el mismo terminal o símbolo del sistema.
- Anote el nombre de la cola del espacio de nombres de Service Bus. Tú necesitas eso en el código.
Esta guía de inicio rápido funciona con ejemplos que puede copiar y ejecutar mediante Python. Para obtener instrucciones sobre cómo crear una aplicación de Python, consulte Inicio rápido: Implementación de una aplicación web de Python en Azure App Service. Para más información sobre cómo instalar paquetes usados en este inicio rápido, consulte Instalación de paquetes de biblioteca de Azure para Python.
Creación de un espacio de nombres en Azure Portal
Para empezar a usar entidades de mensajería de Service Bus en Azure, cree un espacio de nombres con un nombre único en Azure. Un espacio de nombres proporciona un contenedor de ámbito para los recursos de Service Bus, como colas y temas, en la aplicación.
Para crear un espacio de nombres:
Inicie sesión en Azure Portal.
Seleccione el menú flotante de la parte superior izquierda y vaya a la página Todos los servicios.
En la barra de navegación izquierda, seleccione Integración.
Desplácese hacia abajo hasta Servicios de mensajería>Service Bus y seleccione Crear.
En la pestaña Aspectos 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 un nombre de espacio de nombres que cumpla las siguientes convenciones de nomenclatura:
- El nombre debe ser único en Azure. El sistema realiza la comprobación automáticamente para ver si el nombre está disponible.
- La longitud del nombre es de 6 caracteres como mínimo y 50 como máximo.
- El nombre solo puede contener letras, números y guiones
-
. - El nombre debe comenzar con una letra y terminar con una letra o un número.
- El nombre no termina con
-sb
ni-mgmt
.
En Ubicación, elija la región para 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 Nivel Premium , puede habilitar la replicación geográfica para el espacio de nombres. La característica de 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. Los temas y las suscripciones no se admiten en el plan de tarifa Básico.
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 Nivel de mensajería Premium 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 se haya realizado correctamente, seleccione Ir al recurso en la página de implementación.
Verá la página principal del espacio de nombres de Service Bus.
Creación de colas en Azure Portal
En la página Espacio de nombres de Service Bus, expanda Entidades en el menú de navegación a la izquierda y seleccione Colas.
En la página Colas, en la barra de herramientas, seleccione + Cola.
Escriba un nombre para la cola. Deje los demás valores con sus valores predeterminados.
Selecciona Crear.
Autenticación de la aplicación en Azure
En este artículo se muestran dos maneras de conectarse a Azure Service Bus: sin contraseña y 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, es posible que encuentre la opción de cadena de conexión más fácil de seguir. 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 de Service Bus. Para más información sobre la autenticación sin contraseña, consulte Autenticación de aplicaciones .NET.
Asignación de roles al usuario de Microsoft Entra
Al desarrollar localmente, asegúrese de que la cuenta de usuario que se conecta a Azure Service Bus tiene los permisos correctos. Necesita el rol Propietario de datos de Azure Service Bus para enviar y recibir mensajes. Para asignarse este rol, necesita el rol Administrador de acceso de usuario u otro rol que incluya la Microsoft.Authorization/roleAssignments/write
acción.
Puede asignar roles RBAC de Azure a un usuario mediante Azure Portal, la CLI de Azure o Azure PowerShell. Para más información sobre los ámbitos disponibles para las asignaciones de roles, consulte Descripción del ámbito de RBAC de Azure.
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.
Roles integrados de Azure para Azure Service Bus
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:
- Propietario de datos de Azure Service Bus: habilita el acceso a los datos al espacio de nombres de Service Bus y a sus entidades, incluidas las colas, los temas, las suscripciones y los filtros. Un miembro de este rol puede enviar y recibir mensajes de colas o temas y suscripciones.
-
Remitente de datos de Azure Service Bus: use este rol para conceder acceso
send
al espacio de nombres de Service Bus y sus entidades. -
Receptor de datos de Azure Service Bus: utiliza este rol para otorgar
receive
acceso al espacio de nombres de Service Bus y sus entidades.
Si desea crear un rol personalizado, consulte Derechos necesarios para las operaciones de Service Bus.
Incorporación de un usuario de Microsoft Entra al rol Propietario de Azure 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. Esta configuración permite que una aplicación que se ejecute en el contexto de la cuenta de usuario envíe mensajes a una cola o a un tema. Puede recibir mensajes de una cola o de la suscripción de un tema.
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.
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 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.
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.
Uso de Pip para instalar paquetes
Para instalar los paquetes de Python necesarios para este inicio rápido de Service Bus, abra una ventana del símbolo del sistema que tenga Python en su ruta de acceso.
Cambie el directorio a la carpeta en la que quiera tener los ejemplos.
Instale los siguientes paquetes:
pip install azure-servicebus pip install azure-identity pip install aiohttp
mensajes a una cola
El código de ejemplo siguiente muestra cómo enviar un mensaje a una cola. Abra un editor de texto, como Visual Studio Code, cree un archivo send.py y agregue el código siguiente.
Agregue las instrucciones import.
import asyncio from azure.servicebus.aio import ServiceBusClient from azure.servicebus import ServiceBusMessage from azure.identity.aio import DefaultAzureCredential
Agregue constantes y defina una credencial.
FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE" QUEUE_NAME = "QUEUE_NAME" credential = DefaultAzureCredential()
Importante
- Reemplace
FULLY_QUALIFIED_NAMESPACE
por el espacio de nombres completo de Service Bus. - Reemplace
QUEUE_NAME
por el nombre de la cola.
- Reemplace
Agregue un método para enviar un solo mensaje.
async def send_single_message(sender): # Create a Service Bus message and send it to the queue message = ServiceBusMessage("Single Message") await sender.send_messages(message) print("Sent a single message")
El remitente es un objeto que actúa como cliente para la cola que ha creado. Primero lo creas y luego lo envías como argumento a esta función.
Agregue un método para enviar una lista de mensajes.
async def send_a_list_of_messages(sender): # Create a list of messages and send it to the queue messages = [ServiceBusMessage("Message in list") for _ in range(5)] await sender.send_messages(messages) print("Sent a list of 5 messages")
Agregue un método para enviar un lote de mensajes.
async def send_batch_message(sender): # Create a batch of messages async with sender: batch_message = await sender.create_message_batch() for _ in range(10): try: # Add a message to the batch batch_message.add_message(ServiceBusMessage("Message inside a ServiceBusMessageBatch")) except ValueError: # ServiceBusMessageBatch object reaches max_size. # New ServiceBusMessageBatch object can be created here to send more data. break # Send the batch of messages to the queue await sender.send_messages(batch_message) print("Sent a batch of 10 messages")
Cree un cliente de Service Bus y un objeto de remitente de cola para enviar mensajes.
async def run(): # create a Service Bus client using the credential async with ServiceBusClient( fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE, credential=credential, logging_enable=True) as servicebus_client: # get a Queue Sender object to send messages to the queue sender = servicebus_client.get_queue_sender(queue_name=QUEUE_NAME) async with sender: # send one message await send_single_message(sender) # send a list of messages await send_a_list_of_messages(sender) # send a batch of messages await send_batch_message(sender) # Close credential when no longer needed. await credential.close()
Llame al método
run
e imprima un mensaje.asyncio.run(run()) print("Done sending messages") print("-----------------------")
mensajes de una cola
El código de ejemplo siguiente muestra cómo recibir mensajes de una cola. El código mostrado recibe mensajes nuevos, hasta que deja de hacerlo durante 5 (max_wait_time
) segundos.
Abra un editor de texto, como Visual Studio Code, cree un archivo recv.py y agréguele el código siguiente.
De forma similar al ejemplo send.py, añada
import
sentencias. Reemplace las constantes por sus propios valores y defina una credencial.import asyncio from azure.servicebus.aio import ServiceBusClient from azure.identity.aio import DefaultAzureCredential FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE" QUEUE_NAME = "QUEUE_NAME" credential = DefaultAzureCredential()
Cree un cliente de Service Bus y un objeto de receptor de cola para recibir mensajes.
async def run(): # create a Service Bus client using the connection string async with ServiceBusClient( fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE, credential=credential, logging_enable=True) as servicebus_client: async with servicebus_client: # get the Queue Receiver object for the queue receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_NAME) async with receiver: received_msgs = await receiver.receive_messages(max_wait_time=5, max_message_count=20) for msg in received_msgs: print("Received: " + str(msg)) # complete the message so that the message is removed from the queue await receiver.complete_message(msg) # Close credential when no longer needed. await credential.close()
Llame al método
run
.asyncio.run(run())
Ejecución de la aplicación
Abra un símbolo del sistema que tenga Python en su ruta de acceso y, a continuación, ejecute el código para enviar y recibir mensajes de la cola.
python send.py; python recv.py
Debería ver la siguiente salida:
Sent a single message
Sent a list of 5 messages
Sent a batch of 10 messages
Done sending messages
-----------------------
Received: Single Message
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
En Azure Portal, vaya al espacio de nombres de Service Bus. En la página Información general, compruebe que el recuento de mensajes entrantes y salientes es 16. Si no ve los recuentos, espere unos minutos y actualice la página.
Seleccione la cola en esta página Información general para ir a la página Cola de Service Bus. En esta página también verá el recuento de mensajes entrantes y salientes. También verá otra información, como el tamaño actual de la cola y el recuento de mensajes activos.
Contenido relacionado
Consulte la documentación y los ejemplos siguientes:
-
- La carpeta sync_samples tiene ejemplos que muestran cómo interactuar con Service Bus de forma sincrónica.
- La carpeta async_samples tiene ejemplos que muestran cómo interactuar con Service Bus de forma asincrónica. En este inicio rápido, ha usado este método.