Request-Reply en C#: Guía Completa

Introducción: Pregunta y respuesta

Request-Reply es el patrón clásico de comunicación: un cliente envía una solicitud y espera una respuesta del servidor.

Puede implementarse sobre HTTP, gRPC o mensajería asíncrona con un identificador de correlación para emparejar respuestas.

La gran ventaja es la simplicidad: el flujo es claro y el cliente sabe si la operación fue exitosa o no.

Request-Reply
Prompt: Request and reply arrows between services, clean minimal style.

1. Naturaleza: Llamado y eco

Un grito en una montaña genera un eco. Hay un emisor, una respuesta y un tiempo de espera.

Si el eco no llega, asumimos que hubo un fallo. En sistemas, ese tiempo de espera se modela con timeouts.

Eco
Prompt: Echo waves in mountains, soft natural illustration.

2. Mundo Real: Call center

Un cliente llama, solicita información y espera respuesta del operador.

Si la respuesta demora demasiado, la llamada se corta. En software, ese corte es un timeout controlado.

Cuando el volumen crece, se agregan colas y sistemas de respuesta automática para no saturar al operador.

Call center
Prompt: Call center workflow diagram, clean flat style.

3. Implementación en C#: Código Paso a Paso

public class Requester
{
    public string Request(Func handler)
    {
        // Simula timeout o reintentos si fuese necesario
        return handler();
    }
}

var requester = new Requester();
string reply = requester.Request(() => "Respuesta OK");
Console.WriteLine(reply);

En mensajería asíncrona se usa un CorrelationId para emparejar la respuesta con la solicitud original.

También es común definir políticas de timeout y reintento para evitar bloquear indefinidamente.

4. Request-Reply vs Pub/Sub

Request-Reply es punto a punto y el cliente espera una respuesta única. Pub/Sub difunde eventos a muchos suscriptores.

Elige Request-Reply para operaciones de lectura o decisiones inmediatas; usa Pub/Sub para notificar cambios.

5. Diagrama UML

UML Request-Reply
Prompt: UML diagram of request-reply pattern, clean vector layout.
Flujo Request-Reply
Prompt: Request-reply sequence diagram, minimal infographic style.

⚠️ Cuándo NO Usar Request-Reply

  • Si necesitas difusión a múltiples consumidores.
  • Si la operación es pesada y no quieres bloquear al cliente.
  • Si el sistema requiere alta resiliencia ante fallos parciales.

💪 Ejercicio

Implementa un Request-Reply con un identificador de correlación y simula un timeout en C#.

Conclusión

Request-Reply es simple y directo, ideal para operaciones de respuesta inmediata.

Si controlas timeouts y reintentos, puedes usarlo de forma segura en sistemas distribuidos.