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.

Respuestas inesperadas utilizando Nats JetStream

Estoy usando Nats JetStream para implementar la funcionalidad de solicitud-respuesta. Todo funciona bien, excepto por el pequeño detalle de que recibo una respuesta muy extraña. Los datos en el mensaje de respuesta no son en absoluto lo que estaba enviando desde el extremo que responde.

Esto también se puede reproducir usando la CLI de Nats, lo que significa que mi código que está enviando o recibiendo el mensaje no es el problema. Sin embargo, lo que podría ser el problema es la forma en que estoy creando el stream, ya que esto funciona bien cuando se usa Nats sin un stream.

Esta es la configuración de mi stream en Go:

var Read = &nats.StreamConfig{
    Name:        "read",
    Description: "Read Stream",
    Subjects: []string{
        "read.things",
    },
    Retention:    nats.LimitsPolicy,
    MaxConsumers: -1,
    MaxMsgs:      -1,
    MaxBytes:     -1,
    Discard:      nats.DiscardOld,
    MaxAge:       0,
    MaxMsgSize:   -1,
    Storage:      nats.FileStorage,
    Replicas:     0,
    NoAck:        false,
    Duplicates:   2 * time.Minute,
}

Y lo creo de esta manera:

_, err = jetStream.AddStream(streams.Read)

Para reproducir el problema, primero configuro un escucha usando la CLI de Nats:

nats reply 'read.things' "Hello there"

Luego envío una solicitud:

nats request read.things
Hi
[Ctrl+D]

Y obtengo esto:

12:01:08 Leyendo el contenido desde STDIN
hi?
12:01:12 Enviando solicitud en "read.things"
12:01:12 Recibido en "_INBOX.91kMP9XDsFLK09g690N97Z.zTJsXJxE" rtt 19.422916ms
{"stream":"read", "seq":1}

Como puedes ver, obtengo esto de vuelta: {"stream":"read", "seq":1} cuando esperaba obtener Hello there. ¿Por qué sucede esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede estar en la forma en que estás configurando el escuchador y enviando el mensaje de respuesta, en lugar de con la configuración del flujo. El extraño mensaje de respuesta que estás recibiendo ({"stream":"read", "seq":1}) sugiere que el escuchador está respondiendo con un objeto JSON que contiene información sobre el flujo y el número de secuencia del mensaje, en lugar del propio mensaje de respuesta.

    Para resolver este problema, es posible que desees verificar el código de tu escuchador y asegurarte de que está enviando el mensaje de respuesta correcto. Es posible que haya un error o una errata que esté haciendo que el escuchador envíe el mensaje incorrecto.

    Alternativamente, podrías intentar utilizar una herramienta o biblioteca diferente para probar la funcionalidad de solicitud-respuesta, para ver si el problema es específico de la línea de comandos de nats. Por ejemplo, podrías intentar utilizar un pequeño programa de prueba que envíe una solicitud y espere un mensaje de respuesta específico, para ver si se comporta correctamente con JetStream.

    En general, parece que puede haber un problema con la forma en que el escuchador está manejando la solicitud y enviando la respuesta, en lugar de con la configuración de JetStream en sí misma.

Comments are closed.