我一直在评估 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);
当代理进入失败状态时阻塞。我希望会抛出一些异常,所以会有一些迹象表明经纪人失败了。
我意识到我的测试代码正在向代理发送垃圾邮件,并且我希望代理会失败。但是,我更希望经纪人“大声”失败,而不是简单地阻止。
这是不切实际的期望吗?
更新:
Uri 的回答引用了 3 月份提交的 ActiveMQ 错误报告。错误描述包括一个听起来像我正在寻找的提案:“如果传输上的请求有超时(这是为了捕获失败场景,所以一些不应该合理发生的事情),事情就会出错而不是而不是建立等待线程。”
但是,在 8 个月后,该错误目前已通过单次投票取消分配。所以我想问题仍然存在,这是 ActiveMQ 应该(将会?)实现的吗?