Я реализовал 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;
}