Apache Camel Endpoint injection à la route directe "Aucun consommateur disponible sur le point de terminaison"
Je veux utiliser Chameaux pour porter un message de ActiveMQ et puis, en se basant sur le contenu du message (un protobuf), envoyer un ou plusieurs messages sur Twitter. J'ai écrit un haricot qui est appelée à partir de l'intérieur d'une route et qui utilise l'injection d'envoyer plusieurs messages à un "direct:xyz" point de terminaison.
Cependant, le Chameau est de se plaindre au moment de l'exécution:
2012-11-16 09:56:33,376 | WARN | ication.twitter] | DirectProducer | 160 - org.apache.camel.camel-core - 2.10.2 | No consumers available on endpoint: Endpoint[direct://twitter] to process: Exchange[Message: hello world]
Si je, au lieu d'injecter directement le Twitter de point de terminaison de l'intérieur de la fève, il fonctionne très bien. Toutefois, afin de faciliter les tests, de simplifier la configuration, etc, j'aimerais garder la réelle Twitter config séparé, donc vouloir envoyer à un circuit distinct.
Le chameau contexte config ressemble:-
<camelContext id="NotificationTwitter"
trace="false" xmlns="http://camel.apache.org/schema/blueprint">
<dataFormats>
<protobuf id="notificationProto" instanceClass="org.abc.schemas.protobuf.NotificationDef$NotificationMsg" />
</dataFormats>
<route id="TwitterPreparation">
<from uri="activemq:notification.twitter" />
<unmarshal ref="notificationProto" />
<log logName="abc" loggingLevel="INFO"
message="Twitter request received: ${body}" />
<bean ref="NotificationTweeter" method="createTweets" />
</route>
<route id="Twitter">
<from uri="direct:twitter" />
<log logName="abc" loggingLevel="INFO"
message="Tweeting: ${body}" />
<to uri="twitter://timeline/user?consumerKey=itsasecret&consumerSecret=itsasecret&accessToken=itsasecret&accessTokenSecret=itsasecret" />
</route>
</camelContext>
Le haricot ressemble:-
public class NotificationTweeter {
@EndpointInject(uri = "direct:twitter")
private ProducerTemplate producerTemplate;
public void createTweets(NotificationMsg notification) {
String tweet = notification.getMessageDetail().getTitle();
try {
//only send tweets where the notification message contains the Twitter mechanism
for (MechanismMsg mechanism : notification.getMechanismList()) {
if (mechanism.getType() == MechanismTypeEnum.TWITTER) {
//Cycle round the recipients
for (RecipientMsg recipient : mechanism.getRecipientList()) {
tweet = "@" + recipient.getIdentifier() + " " + tweet;
producerTemplate.sendBody(tweet);
}
//TODO exceptions if no recipients found, etc
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
J'ai eu ce problème dans d'autres voies (ce n'est certainement pas liée à la fonctionnalité de Twitter), mais ont simplement travaillé autour d'elle. Cette fois, cependant, j'aimerais vraiment comprendre ce qu'est la question! Toute aide reçue avec gratitude, merci.
source d'informationauteur Jeremy Gooch
Vous devez vous connecter pour publier un commentaire.
Cela ressemble à un problème avec le démarrage de la commande de vos itinéraires. Voir plus de détails ici http://camel.apache.org/configuring-route-startup-ordering-and-autostartup.html
Vous pouvez configurer le "direct" de l'itinéraire pour commencer, avant de l'autre route, alors que la question devrait être résolue.
En fonction de votre configuration, il peut aussi dépendre de la
CamelContext
que vous avez ramassé. J'ai eu le même message d'erreur parce que j'ai été l'envoi de messages sur une route qui existait dans un autreCamelContext
que ce que j'ai fait était de l'utiliser.(Bien que la réponse précédente a déjà été acceptée, cela pourrait être la solution de travail pour d'autres personnes à la recherche de ce message d'erreur.)
Pour les autres de venir ici, cette erreur peut également être due à un OSGI erreur pour une dépendance qui n'a pas été déployé.
Un peu en retard à la fête, mais cette erreur qui m'est arrivé lorsque j'ai eu deux plan directeur des fichiers, l'un pour le fonctionnement normal et un pour tester. Dans mon test, j'ai été en se référant à l'épreuve plan, mais il a remarqué que la normale a également démarré automatiquement, ce qui a causé des erreurs.
Dans la documentation http://camel.apache.org/blueprint-testing.html il est dit que vous pouvez désactiver certains faisceaux de démarrage. Qui m'a aidé dans mon cas.