У меня уже есть слушатель, который слушает фиксированную очередь. Я хотел бы изменить его, чтобы добавить слушателя во время выполнения.
Например, производитель читает файлы для 10 пользователей и записывает сообщения в 10 очередей JMS (каждый пользователь имеет свою собственную очередь). Теперь я хочу зарегистрировать новую очередь во время выполнения, чтобы каждая очередь получала свой собственный слушатель.
Есть ли способ добиться этого?
@JmsListener(destination = JmsConfig.INSERT_PRODUCT_QUEUE, containerFactory = "queueFactory")
public void listen(@Payload ProductData[] productDataArray, MessageHeaders headers, Message message) throws JMSException {
try {
DefaultImportService defaultImportService = (DefaultImportService) applicationContext.getBean("getDefaultImportService");
defaultImportService.run(productDataArray, String.valueOf(headers.get("manufacturer")), String.valueOf(headers.get("tenant")));
} catch (Exception e) {
log.error("error", e);
}
}
@Bean
public ActiveMQConnectionFactory connectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(brokerUrl);
connectionFactory.setPassword(user);
connectionFactory.setUserName(passwort);
ActiveMQPrefetchPolicy policy = new ActiveMQPrefetchPolicy();
policy.setQueuePrefetch(10);
connectionFactory.setPrefetchPolicy(policy);
return connectionFactory;
}
@Bean
public JmsListenerContainerFactory<?> queueFactory(DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory());
factory.setMessageConverter(messageConverter());
factory.setSessionTransacted(false);
factory.setConcurrency("200");
factory.setPubSubDomain(false);
return factory;
}