【问题标题】:Camel - DirectConsumerNotAvailableException No consumers available on endpointCamel - DirectConsumerNotAvailableException 端点上没有可用的消费者
【发布时间】:2014-11-11 23:41:22
【问题描述】:

我一直在 Google 和 Stackoverflow 上搜索这个问题。我已经看到其他几个人报告了同样的异常,虽然我理解建议的解决方案是什么,但如果我看到完全相同的问题,如果你愿意的话,我不是 100%。

当然,这里是个例外:

我有一个有两条路线的 Camel 项目。这是一个简化:

<route>
  <from uri="jetty://http://0.0.0.0:8181/listener"/>
  <to uri="direct:ProcessMessage"/>
</route>

<route>
  <from uri="direct:ProcessMessage"/>
  ...
</route>

所以这段代码 sn-p 大部分时间都可以正常工作。但是,我试图测试代码的可扩展性。系统什么时候开始出现故障?

当在上面的侦听器端点上每秒发送 100 条消息时(使用 Jetty),我开始在日志中看到:

org.apache.camel.component.direct.DirectConsumerNotAvailableException: No consumers available on endpoint: Endpoint[direct://ProcessMessage]

我看到的解决方案表明这是因为路由的顺序(即它们是如何被初始化的)。如果在这种情况下确实如此,为什么这只会在较重的负载下发生,而不是一直发生?

【问题讨论】:

    标签: java apache-camel integration producer-consumer


    【解决方案1】:

    由于它仅在负载下发生,我敢打赌消费者会受到限制。尝试使用 jconsole 来监控队列的大小。我会尝试寻找直接队列的大小限制。

    【讨论】:

    • 您能否进一步详细说明您所说的消费者受到限制的意思?我正在尝试用谷歌搜索,但并没有真正得到清晰的画面。您是说消费端点(即本例中的 ProcessMessage)无法跟上生产端点的速度?
    • 我的直觉说 Camel 正在尝试将消息发送到直接端点,但是没有可用的端点,因为它们现在都在处理其他消息。直接端点是同步的,使用异步的 seda 端点可能会更幸运,但是使用 seda 队列,您肯定会有队列大小限制。
    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多