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.

JeroMQ envía latidos desde el mismo hilo.

Tengo un problema con el modo PUB/SUB, donde el SUB a veces deja de recibir datos de forma aleatoria (una vez al día aproximadamente). Quiero agregar un mensaje de latido personalizado desde el PUB al SUB cada segundo, pero necesito enviarlo desde el mismo hilo porque el PUB no es seguro para subprocesos. Para hacer eso, puedo usar algún temporizador/programador de Java para realizarlo cada segundo, pero el problema es que el temporizador/programador crea un nuevo hilo.
Estoy recibiendo datos de un websocket externo en el PUB y no veo una forma de enviar un latido como todos están hablando. La única forma sería agregar un proxy usando XPUB-XSUB…

¿Alguna idea de cómo se podría hacer eso?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Java, ZeroMQ y Jeromq, recomiendo utilizar un ExecutorService de un solo hilo para programar los mensajes de latido. Esto asegurará que los mensajes sean enviados desde el mismo hilo y no se creen hilos adicionales.

    Aquí tienes un fragmento de código de ejemplo en Java que debería ayudarte a implementarlo:

    import java.util.concurrent.*;
    
    // crea un executor service de un solo hilo
    ExecutorService executor = Executors.newSingleThreadExecutor();
    
    // programa el mensaje de latido para que se ejecute cada segundo
    executor.scheduleAtFixedRate(() -> {
        // envía el mensaje de latido utilizando el socket PUB
        pubSocket.send("heartbeat".getBytes(ZMQ.CHARSET), 0);
    }, 0, 1000, TimeUnit.MILLISECONDS);
    

    En este ejemplo, estamos creando un executor service de un solo hilo utilizando el método Executors.newSingleThreadExecutor(). Luego, estamos utilizando el método scheduleAtFixedRate() para programar el mensaje de latido para que se ejecute cada segundo.

    Dentro de la expresión lambda, estamos enviando el mensaje heartbeat utilizando el socket PUB. Esto asegura que el mensaje solo se envíe desde el mismo hilo que está ejecutando el ExecutorService.

    Espero que esto te ayude a resolver tu problema con el modo PUB/SUB. ¡Avísame si tienes alguna otra pregunta!

Comments are closed.