首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache camel如何实现电线抽头的可选使用者

Apache camel如何实现电线抽头的可选使用者
EN

Stack Overflow用户
提问于 2019-01-03 13:18:36
回答 1查看 686关注 0票数 1

我建立了一些路线(Camel 2.22.1),使用电源线将一些东西登录到一个Mongo数据库中。

代码语言:javascript
复制
from(DIRECT_NEXT).process(sendFile)
        .wireTap( "direct:count-fetch?failIfNoConsumers=false" )

如您所见,我正在使用failIfNoConsumers=false.

代码语言:javascript
复制
from(COUNT_FETCH)
        .routeId( MONGO_COUNT_FETCH_ROUTEID )
        .autoStartup( false )
        .process(countFetchProcessor)
        .to(persistenceEndpoints.updateImage())
        .log(LoggingLevel.DEBUG, "Counted fetch.");

mongo是一个可选组件,整个应用程序将在没有它的情况下运行。

我正在使用Mongo的ServerMonitorListener来检查Mongo是否可用。因此,我使用Camel's ControlBus暂停或恢复溃败。

一切都很顺利!我的问题是,骆驼试图把这些交易发送到30多个不运行的路线上:

代码语言:javascript
复制
...
[DEBUG] 2019-01-03 14:02:45.848 [Camel (camel-1) thread #23 - WireTap] DirectBlockingProducer - Waited 20025 for consumer to be ready
...

制作人为什么要阻止我?“块”的默认值应该是false?!当然,在这之后我们看到了一个例外:

代码语言:javascript
复制
 No consumers available on endpoint: direct://count-fetch?failIfNoConsumers=false

让骆驼立即放弃交换的最佳方法是什么(如何确定时间?)不要抛出任何异常(因为它是正常的应用程序行为,异常只会减慢)?

更新:这里的是完全的例外:

代码语言:javascript
复制
[ERROR] 2019-01-07 10:21:22.702 [Camel (camel-1) thread #4 - WireTap] DefaultErrorHandler - Failed delivery for (MessageId: ID-moritz-1546852848013-0-3 on ExchangeId: ID-moritz-1546852848013-0-2). Exhausted after delivery attempt: 1 caught: org.apache.camel.component.direct.DirectConsumerNotAvailableException: No consumers available on endpoint: direct://update-all?failIfNoConsumers=false. Exchange[ID-moritz-1546852848013-0-2]

Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
[route4            ] [route4            ] [timer://updateAll                                                             ] [     30065]
[route4            ] [log1              ] [log                                                                           ] [         1]
[route4            ] [to3               ] [direct:updateAll                                                              ] [        19]
[route5            ] [process2          ] [Processor@0x4e92466a                                                          ] [         9]
[route5            ] [process3          ] [Processor@0x1b29d52b                                                          ] [         7]
[route5            ] [wireTap1          ] [wireTap[direct:update-all?failIfNoConsumers=false]                            ] [         1]

Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
org.apache.camel.component.direct.DirectConsumerNotAvailableException: No consumers available on endpoint: direct://update-all?failIfNoConsumers=false. Exchange[ID-moritz-1546852848013-0-2]
    at org.apache.camel.component.direct.DirectBlockingProducer.getConsumer(DirectBlockingProducer.java:67) ~[camel-core-2.22.1.jar:2.22.1]
    at org.apache.camel.component.direct.DirectBlockingProducer.process(DirectBlockingProducer.java:53) ~[camel-core-2.22.1.jar:2.22.1]
    at org.apache.camel.processor.SendDynamicProcessor$1.doInAsyncProducer(SendDynamicProcessor.java:178) ~[camel-core-2.22.1.jar:2.22.1]
    at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:445) ~[camel-core-2.22.1.jar:2.22.1]
    at org.apache.camel.processor.SendDynamicProcessor.process(SendDynamicProcessor.java:160) ~[camel-core-2.22.1.jar:2.22.1]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) [camel-core-2.22.1.jar:2.22.1]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) [camel-core-2.22.1.jar:2.22.1]
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97) [camel-core-2.22.1.jar:2.22.1]
    at org.apache.camel.processor.WireTapProcessor$1.call(WireTapProcessor.java:160) [camel-core-2.22.1.jar:2.22.1]
    at org.apache.camel.processor.WireTapProcessor$1.call(WireTapProcessor.java:155) [camel-core-2.22.1.jar:2.22.1]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_181]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_181]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_181]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
EN

回答 1

Stack Overflow用户

发布于 2019-01-05 07:34:42

确保检查您使用的Camel版本的文档,即2.22.x

在这里您可以看到块是默认启用的:https://github.com/apache/camel/blob/camel-2.22.x/camel-core/src/main/docs/direct-component.adoc

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54023107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档