У меня проблема с приложением SpringBoot Camel.
Очень хорошо работает с не встроенным брокером. Вот его конфигурация:
URL указывается в виде строки, указывающей либо на отдельный URL-адрес ActiveMQ, либо на встроенный URL-адрес брокера (vm: // dpcgbroker? Broker.persistent = false)
@Configuration
public class CamelConfiguration {
@Value("${broker.mqURL}")
String mqURL;
@Bean
CamelContextConfiguration contextConfiguration() {
return new CamelContextConfiguration() {
@Override
public void beforeApplicationStart(CamelContext context) {
ActiveMQComponent activeMQComponent = ActiveMQComponent.activeMQComponent(mqURL);
activeMQComponent.setConfiguration(getJmsConfiguration());
context.addComponent("jms", activeMQComponent);
DefaultShutdownStrategy shutdownStrategy = new DefaultShutdownStrategy();
shutdownStrategy.setTimeUnit(TimeUnit.SECONDS);
shutdownStrategy.setTimeout(20);
context.setShutdownStrategy(shutdownStrategy);
}
@Override
public void afterApplicationStart(CamelContext camelContext) {
}
};
}
public PooledConnectionFactory getPooledConnectionFactory() {
PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory(getConnectionFactory());
pooledConnectionFactory.setMaxConnections(30);
return pooledConnectionFactory;
}
public ActiveMQConnectionFactory getConnectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(mqURL);
connectionFactory.setTrustAllPackages(true);
return connectionFactory;
}
public JmsConfiguration getJmsConfiguration() {
JmsConfiguration jmsConfiguration = new JmsConfiguration();
jmsConfiguration.setDisableTimeToLive(true);
jmsConfiguration.setTransacted(true);
jmsConfiguration.setLazyCreateTransactionManager(false);
jmsConfiguration.setConnectionFactory(getConnectionFactory());
jmsConfiguration.setCacheLevelName("CACHE_CONSUMER");
return jmsConfiguration;
}
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public PlatformTransactionManager getTransactionManager() {
PlatformTransactionManager platformTransactionManager = new JmsTransactionManager(getConnectionFactory());
return platformTransactionManager;
}
Когда я переключаюсь на встроенный брокер, поведение меняется, и Apache ActiveMQ запускается, затем останавливается, а затем перезапускается. Я понятия не имею, почему и нет никаких исключений
Вот выдержка из журналов
15967 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.activemq.broker.BrokerService - Using Persistence Adapter: MemoryPersistenceAdapter
15991 INFO - 5063 - [JMX connector] org.apache.activemq.broker.jmx.ManagementContext - JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
16106 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.activemq.broker.BrokerService - Apache ActiveMQ 5.15.2 (dpcgbroker, ID:Greg.local-59246-1525440325893-0:1) is starting
16111 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.activemq.broker.BrokerService - Apache ActiveMQ 5.15.2 (dpcgbroker, ID:Greg.local-59246-1525440325893-0:1) started
16111 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.activemq.broker.BrokerService - For help or more information please see: http://activemq.apache.org
16132 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.activemq.broker.TransportConnector - Connector vm://dpcgbroker started
16205 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.activemq.broker.TransportConnector - Connector vm://dpcgbroker stopped
16205 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.activemq.broker.BrokerService - Apache ActiveMQ 5.15.2 (dpcgbroker, ID:Greg.local-59246-1525440325893-0:1) is shutting down
16213 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.activemq.broker.BrokerService - Apache ActiveMQ 5.15.2 (dpcgbroker, ID:Greg.local-59246-1525440325893-0:1) uptime 0.274 seconds
16213 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.activemq.broker.BrokerService - Apache ActiveMQ 5.15.2 (dpcgbroker, ID:Greg.local-59246-1525440325893-0:1) is shutdown
16618 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.camel.processor.aggregate.AggregateProcessor - Defaulting to MemoryAggregationRepository
16621 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.camel.processor.aggregate.AggregateProcessor - Using CompletionTimeout to trigger after 10 millis of inactivity.
16647 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.camel.spring.SpringCamelContext - Skipping starting of route jobStatusRoute as its configured with autoStartup=false
16656 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.activemq.broker.BrokerService - Using Persistence Adapter: MemoryPersistenceAdapter
16656 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.activemq.broker.BrokerService - Apache ActiveMQ 5.15.2 (dpcgbroker, ID:Greg.local-59246-1525440325893-0:2) is starting
16657 INFO - 5063 - [JMX connector] org.apache.activemq.broker.jmx.ManagementContext - JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
16657 INFO - 5063 - [Camel (camel-1) thread #1 - file://conf/DR3/planets/] org.apache.activemq.broker.BrokerService - Apache ActiveMQ 5.15.2 (dpcgbroker, ID:Greg.local-59246-1525440325893-0:2) started
Проблема заключается в том, что некоторые сообщения отправляются в первом экземпляре посредника, которые теряются при его остановке, затем второй экземпляр начинается с пустого списка сообщений.
Я понятия не имею, почему это останавливается.
PS: я не хочу использовать постоянный встроенный брокер, это бесполезный обходной путь