Я оцениваю ActiveMQ как потенциального брокера сообщений. Я написал тестовый код, чтобы попытаться понять ограничения производительности ActiveMQ.
Я могу создать состояние сбоя в брокере, посылая сообщения настолько быстро, насколько это возможно:
try {
while(true) {
byte[] payload = new byte[(int) (Math.random() * 16384)];
BytesMessage message = session.createBytesMessage();
message.writeBytes(payload);
producer.send(message);
} catch (JMSException ex) { ... }
Я был удивлен, что линия
producer.send(message);
блокируется, когда брокер входит в состояние отказа. Я надеялся, что возникнет какое-то исключение, поэтому будут некоторые признаки того, что брокер потерпел неудачу.
Я понимаю, что мой тестовый код является спамом для брокера, и я ожидаю, что он потерпит неудачу. Однако я бы предпочел, чтобы брокер «громко» потерпел неудачу, а не просто блокировал.
Это нереальное ожидание?
Обновление:
Ответ Ури ссылается на отчет об ошибке ActiveMQ, который был подан в марте. Описание ошибки включает в себя предложение, которое звучит примерно так, как я ищу: «если бы запрос на транспорт имел тайм-аут (это для отслеживания сценариев сбоев, то есть чего-то, что не должно происходить разумно), вещи скорее бы ошибались чем создание ожидающих потоков. "
Однако через 8 месяцев ошибка в настоящее время не назначается одним голосом. Так что я думаю, что вопрос все еще стоит, это что-то, что ActiveMQ должен (будет?) Реализовывать?