Здравствуйте. Использую activiti 6, и service tasks на схеме. Почти у каждого service task прописан один и тот же класс, который отправляет некоторое сообщение. Судя по документации активити, экземпляр этого класса создаётся один на каждый service task. То есть сколько service task, столько и экземпляров этого класса будет (но не больше). В конструкторе класса я создаю экземпляр класса org.springframework.amqp.rabbit.connection.CachingConnectionFactory:
JdbcTemplateNsiDao jdbcTemplateNsiDao = new JdbcTemplateNsiDao();
jdbcTemplateRlDao = new JdbcTemplateRlDao();
String hostName = jdbcTemplateNsiDao.getHostName();
Long port = jdbcTemplateNsiDao.getPort();
logger.info(String.format("Create the ConnectionFactory for the RabbitMQ with host name = %s and port = %d", hostName, port));
CachingConnectionFactory connectionFactory =
new CachingConnectionFactory(hostName, port.intValue());
sendService = new SendServiceImpl(new RabbitTemplate(connectionFactory));
((SendToETPServiceImpl) sendToETPService).setQueueNameForStatusMovement(jdbcTemplateNsiDao.getQueueNameForStatusMovement());
} catch (NamingException | IOException e) {
logger.error("Error while creating JdbcTemplate Dao for Activiti ", e);
}
}
Сообщение отправляю уже в классе SendServiceImpl, используя такой код:
rabbitTemplate.convertAndSend(queueNameForStatusMovement, message);
Вопрос: сколько соединений с RabbitMQ будет создано и когда они создаются? Одно на фабрику или при отправке каждый раз будет создаваться соединение? Сейчас есть ощущение, что создаётся больше одного соединения на фабрику.
И ещё вопрос: как происходит закрытие всех открытых соединений? Необходимо явно вызвать destroy()?
ЗЫ К сожалению, не могу создавать объекты RabbitTemplate и CachingConnectionFactory как бины спринговского контейнера. Как я понял, если они созданы как бины, то не возникает проблем с большим количеством соединений, и спринг сам закрывает соединения при закрытии контекста.