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.

Leyendo mensajes de la cola de Azure Service Bus con un identificador de correlación específico.

¿Existe alguna forma de recibir solo mensajes de una cola de Azure Service Bus con un identificador de correlación específico?

El escenario es el siguiente:
1. Recibo una llamada a la API REST en mi aplicación A
2. Mi aplicación A generará un identificador de correlación único
3. Mi aplicación A enviará una solicitud a otra aplicación B e incluirá el identificador de correlación. Esta solicitud no se envía a través de Azure Service Bus, sino mediante otro mecanismo.
4. La aplicación B realizará alguna lógica y enviará un mensaje de respuesta a una cola de Azure Service Bus con el identificador de correlación que recibió en (3)
5. Mi aplicación A solo quiere leer el mensaje de la cola con el identificador de correlación correspondiente y generar una respuesta al llamador inicial basada en este mensaje de respuesta.

Veo que hay un concepto de sesiones, pero parece excesivo crear nuevas sesiones para cada solicitud en mi aplicación. No puedo reutilizar el identificador de correlación, porque necesito que sean únicos para cada solicitud en mi aplicación. Veo que una alternativa podría ser usar un tema y suscribirme con un filtro, pero eso también parece excesivo.

¿Alguna idea?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible recibir solamente los mensajes de una cola de Azure Service Bus con un identificador de correlación específico mediante el uso de sesiones de mensaje. La función de sesión de mensaje permite que un receptor bloquee y extraiga exclusivamente los mensajes dentro de una sesión. Esto significa que el receptor puede especificar un ID de sesión, que puede ser el ID de correlación en este escenario, para recibir solamente los mensajes que pertenecen a esa sesión en particular.

    Para lograr esto, se necesitaría crear una sesión de mensaje para cada ID de correlación único utilizando la clase ServiceBusSessionClient en el paquete Azure.Messaging.ServiceBus. El ServiceBusSessionClient proporciona métodos para recuperar mensajes de la cola de Service Bus con un ID de sesión específico (ID de correlación) y para completar esos mensajes cuando se finalice el procesamiento.

    ServiceBusSessionClient cliente = new ServiceBusSessionClient(cadenaDeConexión, nombreDeCola);
    
    // Cree una nueva sesión para cada ID de correlación único
    string idDeCorrelación = "identificador-de-correlación-único";
    ServiceBusSessionReceiver receptor = await cliente.AcceptSessionAsync(idDeCorrelación);
    
    // Reciba los mensajes de la sesión específica
    ServiceBusReceivedMessage mensajeRecibido = await receptor.ReceiveMessageAsync();
    
    // Procese el mensaje
    
    // Complete el mensaje una vez finalizado
    await receptor.CompleteMessageAsync(mensajeRecibido.lockToken);
    

    Al utilizar sesiones de mensaje con el ID de correlación específico, puede asegurarse de que su aplicación solo reciba mensajes que estén destinados a esa solicitud y generar una respuesta basada en el mensaje recibido.

Comments are closed.