У меня есть служба монитора, которая отправляет сообщение Rabbitmq для запуска приложения, выключения приложения и каждую минуту (тик). Когда класс был первоначально написан, событие выключения также сработало. Мероприятие было уволено на Метод Dressust интерфейса insosableBean . p>
Оба вышеуказанных метода возвращают: < /p>
Java.lang.illegalStateException: The ApplicationContext закрыт, и
ConnectionFactory больше не может создавать соединения.
Я заметил, что было исправление ошибки https: //jira.spring. io/rowse/amqp-536, который предлагает интерфейс Lifecycle . Соединение RabbitMQ закрыто? Полем Служба монитора подключается к серверу RabbitMQ через DonitorRabBittemplate .
Проблема, по -видимому, заключается в том, что завод по мониторусвице Connection Connection .
Последний код (с помощью Lifecycle вместо ApplicationListener и issoblebean ):
@Component
public class MonitorServiceImpl implements MonitorService , Lifecycle {
private static final Logger LOGGER = LoggerFactory.getLogger(MonitorServiceImpl.class);
private final RabbitTemplate monitorRabbitTemplate;
private final String queueName;
private final Gson gson = new Gson();
@Autowired
public MonitorServiceImpl(@Qualifier("monitorRabbitTemplate") final RabbitTemplate monitorRabbitTemplate,
@Value("${monitor.rabbitmq.queue.name:monitor}") final String queueName) {
this.monitorRabbitTemplate = monitorRabbitTemplate;
this.queueName = queueName;
}
@Scheduled(fixedDelay = 60000)
public void tick() {
try {
send(new Monitor(Status.INFO, "I am here"));
} catch (final Exception e) {
LOGGER.error("FAILED TO SEND TICK EVENT", e);
}
}
@Override
public void send(final Monitor monitor) {
try {
final Message message = MessageBuilder.withBody(gson.toJson(monitor).getBytes())
.setContentType("application/json").setPriority(0).setDeliveryMode(MessageDeliveryMode.PERSISTENT)
.build();
monitorRabbitTemplate.send(queueName, message);
} catch (final Exception e) {
LOGGER.error("FAILED TO SEND MONITOR EVENT", e);
LOGGER.error("FAILED TO SEND MONITOR EVENT to {}:{}", monitorRabbitTemplate.getConnectionFactory()
.getHost(), monitorRabbitTemplate.getConnectionFactory().getPort());
}
}
@Override
public void start() {
try {
send(new Monitor(Status.STARTING, "Application starting up..."));
} catch (final Exception e) {
LOGGER.error("FAILED TO SEND STARTUP EVENT", e);
}
}
@Override
public void stop() {
try {
send(new Monitor(Status.TERMINATING, "Application shutdown..."));
} catch (final Exception e) {
LOGGER.error("FAILED TO SEND SHUTDOWN EVENT", e);
}
}
@Override
public boolean isRunning() {
return true;
}
}
Подробнее здесь: https://stackoverflow.com/questions/384 ... n-shutdown