Приостановить и возобновить верблюжий маршрут
Привет, у меня есть потребительский маршрут JMS в верблюде, мое требование состоит в том, чтобы остановить / приостановить этот маршрут при определенном инциденте (на основе значения некоторого поля), а затем возобновить этот маршрут с помощью планировщика. Для этого я создал два маршрута, один из которых является моим исходным маршрутом потребителя jms, а другой - маршрут планировщика, который возобновляет маршруты потребителя jms, хотя я могу приостановить маршрут, но второй маршрут не возобновляет приостановленный маршрут и показывает его состояние. как началось
ниже мои два маршрута
оригинальный потребительский маршрут
from("activeMQ:demo.audit.event1?testConnectionOnStartup=true&acknowledgementModeName=CLIENT_ACKNOWLEDGE")
.routeId("javadslconsumer")
.log("before stopping==="+new Date().toString())
.process(new Processor() {
@Override
public void process(final Exchange exchange) throws Exception {
try {
Route route = exchange.getContext().getRoute("javadslconsumer");
System.out.println("route.supportsSuspension()"+route.supportsSuspension());
exchange.getContext().suspendRoute("javadslconsumer",1l,TimeUnit.SECONDS);
// create another helper route, using which we can start or resume this route based
// on the current life cycle phase of this route.
} catch (Exception e) {
// ignore
e.printStackTrace();
}
}
})
.log("after stopping logs==="+new Date().toString())
.unmarshal(dataFormat)
.beanRef("auditProcessor", "getErrorAuditDTO")
.beanRef("auditProcessor", "processCreateAudit");
планировщик маршрута
from("timer:dlqscheduler?period=6000&fixedRate=true")
.process(new Processor(){
@Override
public void process(Exchange exchange) throws Exception {
System.out.println("timer process started");
try {
exchange.getContext().resumeRoute("javadslconsumer");
//exchange.getContext().startRoute("javadslconsumer");
} catch (Exception e) {
System.out.println("-----d-d-d-d-"+e.getMessage());
}
ServiceStatus serviceStatus = getContext().getRouteStatus("javadslconsumer");
System.out.println("serviceStatus.isStopped()"+serviceStatus.isStopped()); // showing false instead of true
System.out.println("serviceStatus.isSuspended()"+serviceStatus.isSuspended()); // showing false instead of true
System.out.println("serviceStatus"+serviceStatus);// showing started
}
})
.log("after resuming the route javadslconsumer");
Пожалуйста, помогите мне, как я могу реализовать вышеупомянутый сценарий.
1 ответ
Вы должны дать ему больше времени, чем 1 секунда. Это резервный тайм-аут, поэтому, если приостановка не может произойти в течение 1 секунды, вместо этого запускается маршрут. например, прочитайте документацию по javadoc API, которую вы используете, и вы можете увидеть эту информацию.
Кроме того, есть компонент controlbus, так что вы можете просто отправить сообщение конечной точке, чтобы приостановить / возобновить маршрут.