Camel creando demasiadas conexiones tcp (más de 15000) en estado TIME_WAIT para conectar ActiveMQ

Estoy usando Apache Camel (con Spring) y ActiveMQ en el proyecto. Aquí están las configuraciones relacionadas con JMS / ActiveMQ:

Versión de camello: activemq-camel-5.15.3.jar (todos los frascos relacionados con ActiveMQ)

Versión ActiveMQ: 5.15.0

<!-- language: lang-xml -->
<bean id="defaultActiveMQRedeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
</bean>

<util:list id="redeliveryPolicyEntries">
    <bean id="activeMQRedeliveryPolicy1" class="org.apache.activemq.RedeliveryPolicy">
        <property name="queue" value="inbox"></property>
    </bean>
</util:list>

<bean id="amqRedeliveryPolicyMap"
    class="org.apache.activemq.broker.region.policy.RedeliveryPolicyMap">
    <property name="defaultEntry" ref="defaultActiveMQRedeliveryPolicy"></property>
    <property name="redeliveryPolicyEntries" ref="redeliveryPolicyEntries"></property>
</bean>

<bean id="amqPrefetchPolicy" class="org.apache.activemq.ActiveMQPrefetchPolicy">
</bean>

<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
    <property name="maxConnections" value="20" />
    <property name="maximumActiveSessionPerConnection" value="40" />
    <property name="connectionFactory" ref="jmsConnectionFactory">
    </property>
</bean>

<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="${jmsConnectionFactory.brokerURL}"  />
     <property name="userName" value="admin" /> 
     <property name="password" value="admin" /> 
    <property name="prefetchPolicy" ref="amqPrefetchPolicy" />
    <property name="redeliveryPolicyMap" ref="amqRedeliveryPolicyMap" />
</bean>

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="pooledConnectionFactory" />
    <property name="concurrentConsumers" value="15" />
    <property name="maxConcurrentConsumers" value="30" />
    <property name="asyncConsumer" value="false" />
    <property name="cacheLevelName"  value="CACHE_CONSUMER" />
</bean>

<!-- this bean actually represents a jms component to be used in our camel-integration 
    setup.make endpoints by using name(id) of this bean. -->
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="configuration" ref="jmsConfig" />
    <property name="transacted" value="false" />
    <property name="transactionManager">
        <bean class="org.springframework.jms.connection.JmsTransactionManager">
            <property name="connectionFactory" ref="jmsConnectionFactory" />
        </bean>
    </property>         
</bean>

Como puede ver, estoy usando PooledConnectionFactory, así que espero un número fijo de conexiones para conectarse con ActiveMQ. Pero inesperadamente veo un gran número de conexiones TCP que se abren en TIME_WAIT incluso cuando mi aplicación está inactiva y no se producen / consumen mensajes en ese momento. Confirmé esta situación con el equipo de infraestructura que confirmó que todas las configuraciones de nivel del sistema operativo están bien.

Aquí intenté depurar el método doReceiveAndExecute en AbstractPollingMessageListenerContainer : sessionToUse no es nulo, consumerToUse tampoco es nulo y el código fluye a través de recibenMessage (línea número 304). No pude encontrar el problema en el seguimiento de depuración como se adjunta en las capturas de pantalla de depuración:

AbstractPollingMessageListenerContainer debug

y

Depuración de JmsDestinationAccessor

y mi problema real

Mi problema real

¿Es un problema con MessageListenerContainer o con ConnectionFactory? ¿Me falta alguna configuración que impida que esto suceda o es un problema existente? ¿Si es así, hay alguna solución?

Respuesta 1

He estado trabajando en un pequeño proyecto que involucra Steam Condenser, una API de Steam escrita en Java, pero no he podido hacer nada con ella. Lo explicaré. Esto es lo que la wiki me dice: ...

En mi base de datos Postgresql, tengo una marca de tiempo sin zona horaria con este valor: "2012-06-15 17: 49: 46.423" (tipo de datos predeterminado utilizado por Hibernate). Si formateo con SimpleDateFormat y este patrón "...

Estoy tratando de asignar una cadena JSON a una clase Java usando Jackson. clase pública ChartData {List <String> xAxis = new ArrayList <String> (); List <String> yAxis = new ArrayList <...

Tengo un objeto JAXB (ProductRequest) que representa un documento XML para una solicitud de servicio web. Suponga que se parece a esto: <ProductRequest> <getProducts /> </ ProductRequests & ...