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.

Camel JMS SQS long polling – Larga espera en Camel JMS SQS

Actualmente estoy utilizando camel JMS y lo tengo escuchando una cola en SQS.
Estoy tratando de reducir la cantidad de recepciones vacías. Actualmente tengo 3 por minuto y me gustaría reducirlo a 1.

Mi código del bean se ve así:

@Bean(name = "jms")
@ConditionalOnClass(JmsComponent.class)
public JmsComponent jmsComponent(SQSConnectionFactory sqsConnectionFactory) {
    JmsComponent jmsComponent = new JmsComponent();
    jmsComponent.setConnectionFactory(sqsConnectionFactory);
    return jmsComponent;
}

He intentado lo siguiente:
– establecer el tiempo de espera para recibir mensajes en 20 segundos en la cola
– establecer el RequestTimeout del jmsComponent a 60 segundos
– establecer el ReceiveTimeout del jmsComponent a 60 segundos

Después de hacer lo anterior, todavía puedo ver 3 lecturas vacías por minuto.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Java, Apache-Camel, JMS y Amazon-SQS, puedes probar las siguientes sugerencias para reducir el número de recepciones vacías a 1 por minuto:

    1. Configura la propiedad concurrentConsumers en 1 para el punto de conexión JMS en Camel. Esto creará solo un hilo consumidor escuchando en la cola, reduciendo las posibilidades de recepciones vacías.
    2. Configura la propiedad prefetchCount en 1 para el punto de conexión JMS en Camel. Esto limitará el número de mensajes que el hilo consumidor recupera de la cola, reduciendo las posibilidades de recepciones vacías.

    3. Habilita la función de grupo de mensajes de SQS. Esto asegura que los mensajes con el mismo identificador de grupo de mensajes sean siempre procesados por el mismo hilo consumidor. Esto reducirá las posibilidades de recepciones vacías y mejorará la eficiencia general del consumidor.

    4. Agrega un retraso entre las solicitudes a la cola SQS. Esto reducirá el número de solicitudes realizadas por el consumidor y disminuirá las posibilidades de recepciones vacías.

    Para implementar estos cambios, puedes modificar tu código de bean de la siguiente manera:

    @Bean(name = "jms")
    @ConditionalOnClass(JmsComponent.class)
    public JmsComponent jmsComponent(SQSConnectionFactory sqsConnectionFactory) {
        JmsComponent jmsComponent = new JmsComponent();
        jmsComponent.setConnectionFactory(sqsConnectionFactory);
        jmsComponent.setConcurrentConsumers(1);
        jmsComponent.setPrefetchCount(1);
        jmsComponent.setReceiveTimeout(1000L);
        jmsComponent.setPollingInterval(10000L);
        jmsComponent.setMessageSelector("MessageGroupId='myGroup'");
        return jmsComponent;
    }
    

    Ten en cuenta que los valores de las propiedades pollingInterval, receiveTimeout, concurrentConsumers y prefetchCount pueden necesitar ajustarse según tu caso de uso específico.

Comments are closed.