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.

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.

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.

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

Prompt: UML diagram of request-reply pattern, clean vector layout.

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.