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.

Tamaño inesperado del backlog en Pulsar

Estoy utilizando Pulsar para la comunicación entre servicios y estoy experimentando inestabilidad en una prueba bastante simple de productores y consumidores.

En la prueba JUnit 4, inicio (mis propios envoltorios alrededor de) un servidor ZooKeeper, un servidor BookKeeper y un PulsarService; Las configuraciones deberían ser bastante estándar.

La prueba se puede resumir en los siguientes pasos:

  1. construir un productor;
  2. construir un consumidor (digamos, un lector de un tema Pulsar);
  3. verificar la cola de mensajes (usando el backlog preciso);
  • Se logra esto obteniendo la suscripción actual a través de PulsarAdmin#topics#getStats#subscriptions
  • Espero que sea 0, ya que no se envió nada en el tema, pero a veces es 1, pero esto parece ser otro problema…
  1. construir un nuevo productor y enviar sincrónicamente un mensaje al tema;
  2. construir un nuevo consumidor y leer los mensajes en el tema;
  • Espero una cola de un mensaje, y en realidad leo uno
  1. construir un nuevo productor y enviar sincrónicamente cuatro mensajes;
  2. buscar nuevamente los mensajes, usando el ID del mensaje leído en el paso 5 como ID de inicio de mensaje;
  • Espero una cola de cuatro mensajes aquí, y la mayor parte del tiempo este valor es correcto, pero al ejecutar la prueba unas diez veces, obtengo consistentemente 2 o 5.

Intenté depurar la prueba, pero no puedo averiguar de dónde vienen esos valores; ¿entendí algo mal?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema reside en la inconsistencia en el recuento del backlog al revisar a través de PulsarAdmin después de los pasos 3 y 5. Es posible que el mensaje se haya enviado al consumidor antes de que se actualice el recuento del backlog. Por lo tanto, no es necesario que haya un problema con Pulsar en sí, sino más bien un problema de sincronización en la prueba.

    Una solución potencial sería introducir una demora después del paso 4 para asegurarse de que el mensaje se haya enviado completamente al tema antes de continuar con el paso 5. Además, podrías intentar utilizar un ConsumerBuilder con un nombre de suscripción específico en el paso 5 para asegurarte de que leas desde la suscripción correcta.

    En general, es importante garantizar que los pasos de prueba se ejecuten de manera predecible y consistente para garantizar resultados confiables.

Comments are closed.