Hi,

wouldn't it be enough to disable auto startup on the backup route?


https://camel.apache.org/manual/configuring-route-startup-ordering-and-autostartup.html


js.



On 28.08.2023 9:31, Han Yainsun wrote:
Hi Camel Community,

Greetings to you!

Camel version: 3.20.4
Spring Boot version: 2.7.11
JDK: Amazon Corretto 17
Platform: Windows server 2019
IDE: IntelliJ IDEA 2021.3.2 (Community Edition)
Stack Traces & logging output: attached at the end

I have a case that two routes use the same HTTP listening URL but different 
backend, one is mater and another is backup. Normally during the Camel start 
only master route should be started, the backup route should be in stop status. 
When the master route corresponding backend got issue we can manually start the 
backup route and stop the master route.

The problem is that during Camel startup it will try to start all routes and 
failed due to below error:

---
  Application run 
failed","logger_name":"org.springframework.boot.SpringApplication","thread_name":"main","level":"ERROR","level_value":40000,"stack_trace":"org.apache.camel.FailedToStartRouteException:
 Failed to start route SMS_JSON_MsgFlow because of Multiple consumers for the same endpoint is not allowed: 
jetty:http://0.0.0.0:7806/esb00/helmjson?httpMethodRestrict=POST&matchOnUriPrefix=true
---

I read the Camel document and seems RoutePolicy[1] could be the solution, so I take class 
ThrottlingInflightRoutePolicy as reference and extend class RoutePolicySupport and 
override method onStart as below, however seems it not works. I can see it print the log 
"stop omni channel interface: " on console but the CamelContext still try to 
start the route and got issue.

Could you kindly advise on this? Thanks in advance!

---
     @Override
     public void onStart(Route route) {
         System.out.println("starting route: " + route.getRouteId());
         boolean startOmniChannel = 
Boolean.parseBoolean(String.valueOf(camelContext.getPropertiesComponent().resolveProperty("start_omni_channel")));
         if (!startOmniChannel) {
             try {
                 System.out.println("stop omni channel interface: " + 
route.getRouteId());
                 suspendOrStopConsumer(route.getConsumer());
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
     }
---

Stack Traces & logging output:
---
{"@timestamp":"2023-08-28T10:58:07.52+08:00","@version":"1","message":"Apache Camel 3.20.4 (mini-esb) is 
starting","logger_name":"org.apache.camel.impl.engine.AbstractCamelContext","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:07.62+08:00","@version":"1","message":"Starting CamelMainRunController to ensure the main thread keeps 
running","logger_name":"org.apache.camel.spring.boot.CamelSpringBootApplicationListener","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:07.622+08:00","@version":"1","message":"Apache Camel (Main) 3.20.4 is 
starting","logger_name":"org.apache.camel.main.MainSupport","thread_name":"CamelMainRunController","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:07.642+08:00","@version":"1","message":"Logging initialized @5011ms to 
org.eclipse.jetty.util.log.Slf4jLog","logger_name":"org.eclipse.jetty.util.log","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:08.1+08:00","@version":"1","message":"jetty-9.4.51.v20230217; built: 2023-02-17T08:19:37.309Z; git: 
b45c405e4544384de066f814ed42ae3dceacdd49; jvm 
17.0.7+7-LTS","logger_name":"org.eclipse.jetty.server.Server","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:08.53+08:00","@version":"1","message":"Started 
o.e.j.s.ServletContextHandler@4c635edc{/,null,AVAILABLE}","logger_name":"org.eclipse.jetty.server.handler.ContextHandler","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:08.994+08:00","@version":"1","message":"Started ServerConnector@3009eed7{HTTP/1.1, 
(http/1.1)}{0.0.0.0:7806}","logger_name":"org.eclipse.jetty.server.AbstractConnector","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:08.994+08:00","@version":"1","message":"Started 
@6363ms","logger_name":"org.eclipse.jetty.server.Server","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:09.011+08:00","@version":"1","message":"Error starting CamelContext (mini-esb) due to exception thrown: Failed to start route SMS_JSON_MsgFlow because 
of Multiple consumers for the same endpoint is not allowed: 
jetty:http://0.0.0.0:7806/esb00/helmjson?httpMethodRestrict=POST&matchOnUriPrefix=true","logger_name":"org.apache.camel.impl.engine.AbstractCamelContext","thread_name":"main","level":"ERROR","level_value":40000,"stack_trace":"org.apache.camel.FailedToStartRouteException:
 Failed to start route SMS_JSON_MsgFlow because of Multiple consumers for the same endpoint is not allowed: jetty:http://0.0.0.0:7806/esb00/helmjson?httpMethodRestrict=POST&matchOnUriPrefix=true\r\n\tat  
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRouteConsumers(InternalRouteStartupManager.java:357)\r\n\tat 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartRouteConsumers(InternalRouteStartupManager.java:319)\r\n\tat 
org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:213)\r\n\tat 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRoutes(InternalRouteStartupManager.java:147)\r\n\tat org.apache.camel.impl.engine.AbstractCamelContext.doStartCamel(AbstractCamelContext.java:3434)\r\n\tat 
org.apache.camel.impl.engine.AbstractCamelContext.doStartContext(AbstractCamelContext.java:3103)\r\n\tat org.apache.camel.impl.engine.AbstractCamelContext.doStart(AbstractCamelContext.java:3058)\r\n\tat 
org.apache.camel.spring.boot.SpringBootCamelContext.doStart(SpringBootCamelContext.java:43)\r\n\tat org.apache.camel.support.service.BaseService.start(BaseService.java:119)\r\n\tat 
org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2707)\r\n\tat org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:262)\r\n\tat 
org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:119)\r\n\tat org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:151)\r\n\tat 
org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)\r\n\tat 
org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)\r\n\tat 
org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)\r\n\tat 
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421)\r\n\tat 
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378)\r\n\tat 
org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:940)\r\n\tat org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)\r\n\tat 
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731)\r\n\tat org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)\r\n\tat 
org.springframework.boot.SpringApplication.run(SpringApplication.java:307)\r\n\tat org.springframework.boot.SpringApplication.run(SpringApplication.java:1303)\r\n\tat 
org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)\r\n\tat com.mbfscn.esb.runtime.MiniESBApplication.main(MiniESBApplication.java:16)\r\n"}
{"@timestamp":"2023-08-28T10:58:09.015+08:00","@version":"1","message":"Apache Camel 3.20.4 (mini-esb) is shutting down 
(timeout:45s)","logger_name":"org.apache.camel.impl.engine.AbstractCamelContext","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:09.027+08:00","@version":"1","message":"Stopped ServerConnector@3009eed7{HTTP/1.1, 
(http/1.1)}{0.0.0.0:7806}","logger_name":"org.eclipse.jetty.server.AbstractConnector","thread_name":"Camel (mini-esb) thread #1 - 
ShutdownTask","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:09.03+08:00","@version":"1","message":"Stopped 
o.e.j.s.ServletContextHandler@4c635edc{/,null,STOPPED}","logger_name":"org.eclipse.jetty.server.handler.ContextHandler","thread_name":"Camel (mini-esb) thread #1 - 
ShutdownTask","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:09.037+08:00","@version":"1","message":"Routes stopped 
(stopped:5)","logger_name":"org.apache.camel.impl.engine.AbstractCamelContext","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:09.037+08:00","@version":"1","message":"    Stopped Mini_esb_dynamic_route_controller 
(jetty:http://0.0.0.0:7806/esb06/dynamicRouteController)","logger_name":"org.apache.camel.impl.engine.AbstractCamelContext","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:09.037+08:00","@version":"1","message":"    Stopped Mini_esb_smtp 
(direct://mini-esb-smtp)","logger_name":"org.apache.camel.impl.engine.AbstractCamelContext","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:09.037+08:00","@version":"1","message":"    Stopped SMS_JSON_MsgFlow 
(jetty:http://0.0.0.0:7806/esb00/helmjson)","logger_name":"org.apache.camel.impl.engine.AbstractCamelContext","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:09.038+08:00","@version":"1","message":"    Stopped SMS_XML_MsgFlow 
(jetty:http://0.0.0.0:7806/esb00/helm/)","logger_name":"org.apache.camel.impl.engine.AbstractCamelContext","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:09.038+08:00","@version":"1","message":"    Stopped HELM_JSON_SMS_MsgFlow 
(jetty:http://0.0.0.0:7806/esb00/helmjson)","logger_name":"org.apache.camel.impl.engine.AbstractCamelContext","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:09.041+08:00","@version":"1","message":"Apache Camel 3.20.4 (mini-esb) shutdown in 25ms 
(uptime:1s)","logger_name":"org.apache.camel.impl.engine.AbstractCamelContext","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:09.048+08:00","@version":"1","message":"\r\n\r\nError starting ApplicationContext. To display the conditions report re-run 
your application with 'debug' 
enabled.","logger_name":"org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener","thread_name":"main","level":"INFO","level_value":20000}
{"@timestamp":"2023-08-28T10:58:09.218+08:00","@version":"1","message":"Application run 
failed","logger_name":"org.springframework.boot.SpringApplication","thread_name":"main","level":"ERROR","level_value":40000,"stack_trace":"org.apache.camel.FailedToStartRouteException:
 Failed to start route SMS_JSON_MsgFlow because of Multiple consumers for the same endpoint is not allowed: jetty:http://0.0.0.0:7806/esb00/helmjson?httpMethodRestrict=POST&matchOnUriPrefix=true\r\n\tat  
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRouteConsumers(InternalRouteStartupManager.java:357)\r\n\tat 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartRouteConsumers(InternalRouteStartupManager.java:319)\r\n\tat 
org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:213)\r\n\tat 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRoutes(InternalRouteStartupManager.java:147)\r\n\tat org.apache.camel.impl.engine.AbstractCamelContext.doStartCamel(AbstractCamelContext.java:3434)\r\n\tat 
org.apache.camel.impl.engine.AbstractCamelContext.doStartContext(AbstractCamelContext.java:3103)\r\n\tat org.apache.camel.impl.engine.AbstractCamelContext.doStart(AbstractCamelContext.java:3058)\r\n\tat 
org.apache.camel.spring.boot.SpringBootCamelContext.doStart(SpringBootCamelContext.java:43)\r\n\tat org.apache.camel.support.service.BaseService.start(BaseService.java:119)\r\n\tat 
org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2707)\r\n\tat org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:262)\r\n\tat 
org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:119)\r\n\tat org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:151)\r\n\tat 
org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)\r\n\tat 
org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)\r\n\tat 
org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)\r\n\tat 
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421)\r\n\tat 
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378)\r\n\tat 
org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:940)\r\n\tat 
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)\r\n\tat org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731)\r\n\tat 
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)\r\n\tat org.springframework.boot.SpringApplication.run(SpringApplication.java:307)\r\n\tat 
org.springframework.boot.SpringApplication.run(SpringApplication.java:1303)\r\n\tat org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)\r\n\tat 
com.mbfscn.esb.runtime.MiniESBApplication.main(MiniESBApplication.java:16)\r\n"}
---


References:
[1]https://camel.apache.org/manual/route-policy.html

BRs.
Yainsun
[https://camel.apache.org/_/img/logo-d-f21b25ba38.svg]<https://camel.apache.org/manual/route-policy.html>
RoutePolicy<https://camel.apache.org/manual/route-policy.html>
Camel is an open source integration framework that empowers you to quickly and 
easily integrate various systems consuming or producing data.
camel.apache.org

Reply via email to