Ich möchte Camel verwenden, um eine Nachricht von ActiveMQ zu nehmen und dann basierend auf dem Inhalt der Nachricht (ein Protobuf) eine oder mehrere Nachrichten an Twitter zu senden. Ich habe eine Bean geschrieben, die innerhalb einer Route aufgerufen wird und die Injektion verwendet, um mehrere Nachrichten an einen "direct: xyz" -Endpunkt zu senden.Apache Camel Endpunkt-Injektion zur direkten Route "Keine Verbraucher auf dem Endpunkt verfügbar"
jedoch Camel wird zur Laufzeit beschweren, dass:
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]
Wenn es stattdessen direkt an den Endpunkt Twitter injiziert aus der Bohne, es funktioniert gut. Um das Testen zu vereinfachen, die Konfiguration zu vereinfachen usw., möchte ich die aktuelle Twitter-Konfiguration getrennt halten und möchte daher eine separate Route senden.
Das Kamel Kontext Config wie folgt aussieht: -
Die Bohne wie folgt aussieht: -
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();
}
}
}
ich dieses Problem in anderen Routen gehabt haben (es ist sicherlich nicht auf die Twitter-Funktion im Zusammenhang) aber habe gerade darum herum gearbeitet. Diesmal möchte ich aber tatsächlich verstehen, worum es geht! Jede Hilfe dankbar angenommen, danke.
Danke. Ich habe startupOrder = "100" auf der direkten Route und "200" auf die, die es sendet, und es hat perfekt funktioniert. –
Ich habe vor dem Konfigurieren der Route die Erzeugervorlage und den Kamelkontext gesetzt. Die Reihenfolge ist konfigurieren Route - Kamel Kontext starten - Producer Template Konfiguration –