Сообщения в состоянии ожидания - транзакционный сеанс, параллелизм, кэш-потребители - PullRequest
0 голосов
/ 13 июня 2019

Я реализовал apache activemq в среде hybris, которая использует сервер Tomcat. Я развертываю как производителя, так и потребителя на одном хосте с jms, установленным на одном из серверов приложений. Все кластерные серверы приложений используют один и тот же URL-адрес брокера jms и создают свои собственные очереди в JMS. Это работало нормально во всех более низких средах, но после перехода к производству мы видим много ожидающих сообщений. Которые не доставляются. Я понятия не имею, почему они собираются в состояние ожидания. Любая помощь, пожалуйста?

@Bean
public ActiveMQConnectionFactory connectionFactory()
{
    final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
    final RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
    redeliveryPolicy.setInitialRedeliveryDelay(TimeUnit.MINUTES.toMillis(Long.parseLong(initialRedeliveryDelay)));
    redeliveryPolicy.setRedeliveryDelay(TimeUnit.HOURS.toMillis(Long.parseLong(redeliveryDelay)));
    redeliveryPolicy.setUseExponentialBackOff(false);
    redeliveryPolicy.setMaximumRedeliveries(Integer.parseInt(maximumRedeliveries));

    connectionFactory.setRedeliveryPolicy(redeliveryPolicy);
    connectionFactory.setTrustedPackages(Arrays.asList("com.cintas.core.jms", "javax.mail.internet", "java.util",
            "de.hybris.platform.acceleratorservices.model.email", "de.hybris.platform.servicelayer.model.strategies",
            "com.cintas.integration.vo.email"));
    connectionFactory.setBrokerURL(brokerUrl);
    connectionFactory.setUserName(userName);
    connectionFactory.setPassword(password);
    return connectionFactory;
}

@Bean
public ConnectionFactory cachingConnectionFactory()
{
    final CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
    connectionFactory.setTargetConnectionFactory(connectionFactory());
    connectionFactory.setCacheConsumers(false);
    return connectionFactory;
}

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(final JMSErrorHandler errorHandler)
{
    final DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory());
    factory.setSessionTransacted(true);
    factory.setConcurrency(concurrency);
    factory.setErrorHandler(errorHandler);

    return factory;
}
...