Malheureusement, lorsque l'esclave le courtier commence ainsi le CamelContext avec les routes. Cependant, vous pouvez accomplir cela en procédant comme suit:
Sur le camelContext déployé avec un courtier esclave ajouter ce qui suit autoStartup attribut pour éviter les routes de départ:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring" autoStartup="false">
...
</camelContext>
Ensuite, vous devez créer une classe qui implémente la Interface de service ActiveMQ. Un échantillon de ce serait comme suit:
package com.fusesource.example;
import org.apache.activemq.Service;
import org.apache.camel.spring.SpringCamelContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Example used to start and stop the camel context using the ActiveMQ Service interface
*
*/
public class CamelContextService implements Service
{
private final Logger LOG = LoggerFactory.getLogger(CamelContextService.class);
SpringCamelContext camel;
@Override
public void start() throws Exception {
try {
camel.start();
} catch (Exception e) {
LOG.error("Unable to start camel context: " + camel);
e.printStackTrace();
}
}
@Override
public void stop() throws Exception {
try {
camel.stop();
} catch (Exception e) {
LOG.error("Unable to stop camel context: " + camel);
e.printStackTrace();
}
}
public SpringCamelContext getCamel() {
return camel;
}
public void setCamel(SpringCamelContext camel) {
this.camel = camel;
}
}
ensuite dans le fichier de configuration du courtier, activemq.xml, ajouter ce qui suit pour enregistrer le service:
<services>
<bean xmlns="http://www.springframework.org/schema/beans" class="com.fusesource.example.CamelContextService">
<property name="camel" ref="camel"/>
</bean>
</services>
Maintenant, une fois que le courtier esclave prend la le maître, la méthode start sera invoquée sur la classe de service et les routes seront démarrées.
J'ai également posté un blog sur ce ici: http://jason-sherman.blogspot.com/2012/04/activemq-how-to-startstop-camel-routes.html