【问题标题】:Is this a realistic expectation of a distributed mechanism?这是对分布式机制的现实期望吗?
【发布时间】:2008-12-08 15:40:08
【问题描述】:

我一直在评估 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 应该(将?)实现的东西?

【问题讨论】:

    标签: java distributed activemq


    【解决方案1】:

    您正在测试所有消息代理必须处理的'slow consumer' and producer flowcontrol 问题。你想让生产者失败、阻止它们还是假脱机到磁盘?

    基本上,ActiveMQ 中的开箱即用默认设置是块生产者。但是你可以configure message cursors to spool to disk

    顺便说一句,如果您使用的是队列/主题或持久性/非持久性,您还没有说;如果您使用的是非持久主题,则可以使用其他策略来丢弃消息等。

    【讨论】:

    • 感谢您的回复,我正在使用带有非持久消息的主题。我很好奇将消息游标配置为假脱机到磁盘。如果我用这种配置运行我的“垃圾邮件”测试程序,经纪人会开始填满硬盘吗?
    【解决方案2】:

    显然有一个已知问题,不确定是否已修复:

    https://issues.apache.org/activemq/browse/AMQ-1625

    【讨论】:

      【解决方案3】:

      不确定 ActiveMQ 配置,但其他 JMS 提供程序有各种配置选项 - 因此您也许可以让 ActiveMQ 在这种情况下按照您的意愿行事。

      我知道 Fiorano 可以选择指定在这种情况下提供者是否阻止。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多