es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Azure Service Bus – Cómo agregar un suscriptor de tema de forma programática

Estoy intentando implementar un sistema básico de publicación/suscripción con suscriptores dinámicos. Necesito registrar dinámicamente un suscriptor de tema en mis APIs de .NET, pero parece que solo puedo hacerlo manualmente desde el Portal de Azure. Cuando mi programa comienza, quiero poder registrar un suscriptor a un tema en el formato de nombreDelSuscriptor-{marcaDeTiempo} porque quiero poder implementar tantas versiones de ensayo/desarrollo como desee sin tener que crear estos suscriptores manualmente cada vez.

Siento que esta es una característica fundamental que simplemente estoy pasando por alto. Puedo hacer esto cuando trabajo con colas, pero si intento hacer lo mismo con un tema, obtengo errores continuos de que no se encontró la ruta del suscriptor. He buscado en internet hasta el infinito y, aunque he encontrado ALGUNAS soluciones, son muy antiguas y a menudo no son compatibles con .NET 5 o el paquete está obsoleto. Siento que estoy yendo en contra de la corriente y me estoy perdiendo algo con lo que estoy ideando, así que me gustaría obtener alguna sugerencia sobre cuál es la práctica adecuada para esto.

Actualmente estoy usando Azure.Messaging.ServiceBus para publicar y suscribir. A continuación se muestra un fragmento de código:

var processor = ServiceBusClient.CreateProcessor(TopicName, $"SuscriptorDinamico-{DateTime.Now}");

try
{
    processor.ProcessErrorAsync += ErrorHandler;
    processor.ProcessMessageAsync += MessageHandler;
    await processor.StartProcessingAsync();
}
catch (Exception e)
{
    await processor.DisposeAsync();
    await ServiceBusClient.DisposeAsync();
}
finally
{
    Console.WriteLine("Presione una tecla para salir.");
    Console.ReadLine();
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En efecto, es posible registrar de manera dinámica un suscriptor de temas en las API de .NET sin tener que crear manualmente suscriptores cada vez desde el Portal de Azure. Una forma de lograr esto es utilizando las API de administración de Azure REST en combinación con la biblioteca de clientes de Azure Service Bus .NET.

    Puedes utilizar las API de administración de Azure REST para crear una nueva suscripción para un tema, y luego utilizar la biblioteca de clientes de Azure Service Bus .NET para consumir mensajes de esa suscripción. Aquí tienes un ejemplo de cómo puedes hacerlo:

    using Azure.Messaging.ServiceBus.Administration;
    using Azure.Messaging.ServiceBus;
    
    // ...
    
    var nombreTema = "miTema";
    var nombreSuscripcion = $"SuscriptorDinamico-{DateTime.Now}";
    
    // Primero, crea una nueva suscripción para el tema
    var cliente = new ServiceBusAdministrationClient(cadenaConexion);
    await cliente.CreateSubscriptionAsync(nombreTema, nombreSuscripcion);
    
    // Luego, registra la suscripción con el procesador
    var procesador = new ServiceBusProcessor(cadenaConexion, nombreTema, nombreSuscripcion);
    procesador.ProcessMessageAsync += ManejadorMensajes;
    procesador.ProcessErrorAsync += ManejadorErrores;
    await procesador.StartProcessingAsync();
    
    // ...
    
    // Cuando hayas terminado, recuerda eliminar el procesador y limpiar la suscripción
    await procesador.DisposeAsync();
    await cliente.DeleteSubscriptionAsync(nombreTema, nombreSuscripcion);
    

    Ten en cuenta que también puedes añadir opciones adicionales a la suscripción, como filtrado de mensajes y envío a cola de errores, pasando un objeto CreateSubscriptionOptions al método CreateSubscriptionAsync.

    En definitiva, la conclusión clave es que puedes utilizar una combinación de las API de administración de Azure REST y la biblioteca de clientes de Azure Service Bus .NET para registrar de manera dinámica suscriptores de temas en tus API de .NET.

Comments are closed.