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.

ActiveMQ impide que nuestro servidor de aplicaciones se detenga.

Bajo ciertas circunstancias, ActiveMQ evita que nuestro servidor de aplicaciones se detenga.
Estamos utilizando el siguiente escenario:
La versión 5.16.3 de ActiveMQ está integrada en nuestro Wildfly 25 a través de ActiveMQResourceAdapter. El servidor de aplicaciones está ubicado en un clúster de 2 servidores. El nodo activo es controlado a través de un “lease database locker”.

<persistenceAdapter>
  <jdbcPersistenceAdapter dataDirectory="${WILDFLY_INSTANCE_DATA_DIR}/activemq/jdbcPersistenceAdapter" dataSource="#activeMQDS" createTablesOnStartup="true" lockKeepAlivePeriod="4000">
    <locker>            
      <lease-database-locker lockAcquireSleepInterval="8000" leaseHolderId="${HOSTNAME}:${HOSTPORT}" maxAllowableDiffFromDBTime="2000"/>
    </locker>
    <statements>
      <statements tablePrefix="WILDFLY_" />
    </statements>
  </jdbcPersistenceAdapter>
 </persistenceAdapter>

Si se detiene el servidor de aplicaciones que actualmente no es el nodo activo, el hilo Java continúa. Un volcado de Java muestra que el proceso de detención está bloqueado por ActiveMQ.

 public void stop()
  {
    this.log.debug(new StringBuilder().append("Stop: ").append(getInfo()).toString());
    this.started.compareAndSet(true, false);
    synchronized (this.endpointWorkers) {
      while (this.endpointWorkers.size() > 0) {
        ActiveMQEndpointActivationKey key = (ActiveMQEndpointActivationKey)this.endpointWorkers.keySet().iterator().next();
        endpointDeactivation(key.getMessageEndpointFactory(), key.getActivationSpec());
      }
    }
    //BLOQUEADO AQUÍ
    synchronized (this) {
      if (this.broker != null) {
        if (this.brokerStartThread.isAlive()) {
          this.brokerStartThread.interrupt();
        }
        ServiceSupport.dispose(this.broker);
        this.broker = null;
      }
      if (this.reconnectingXaResource != null) {
        this.reconnectingXaResource.stop();
      }
    }

    this.bootstrapContext = null;
    this.reconnectingXaResource = null;
  }

La detención solo se lleva a cabo si se puede completar el inicio pendiente, lo cual bloquea o habilita el “synchronized”. Dado que el nodo del clúster no es el nodo activo de ActiveMQ, permanece activo hasta que el socio activo ceda su rol.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    ActiveMQ impide que el servidor de aplicaciones se detenga

    Nos enfrentamos a un problema en el que ActiveMQ versión 5.16.3 integrado en Wildfly 25 a través de ActiveMQResourceAdapter está impidiendo que nuestro servidor de aplicaciones se detenga en ciertas circunstancias. El servidor de aplicaciones está alojado en un clúster de dos servidores, y el nodo activo se controla a través de un bloqueo de base de datos de arrendamiento.

    Se está utilizando la siguiente configuración:

    <persistenceadapter>
        <jdbcpersistenceadapter datadirectory="${WILDFLY_INSTANCE_DATA_DIR}/activemq/jdbcPersistenceAdapter" datasource="#activeMQDS" createtablesonstartup="true" lockkeepaliveperiod="4000">
        <locker>
            <lease-database-locker lockacquiresleepinterval="8000" leaseholderid="${HOSTNAME}:${HOSTPORT}" maxallowabledifffromdbtime="2000"></lease-database-locker>
        </locker>
        <statements>
            <statements tableprefix="WILDFLY_"></statements>
        </statements>
        </jdbcpersistenceadapter>
    </persistenceadapter>
    

    Si el servidor de aplicaciones se detiene en un nodo no activo, el hilo de Java continúa. Un volcado de Java indica que el proceso de detención está bloqueado por la detención de ActiveMQ.

    El método stop() solo se ejecuta cuando se puede completar el inicio pendiente, lo que habilita o bloquea el bloqueo synchronized. Dado que el nodo del clúster no es el nodo ActiveMQ activo, permanece activo hasta que el socio activo renuncia a su función.

Comments are closed.