Я хочу использовать Camel для получения сообщения от ActiveMQ, а затем, основываясь на содержимом сообщения (protobuf), отправляйте одно или несколько сообщений в Twitter. Я написал bean, который вызывается из маршрута и который использует инъекцию для отправки нескольких сообщений в конечную точку "direct: xyz".
Однако Camel жалуется во время выполнения, что:
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]
Если я вместо этого введу прямо в конечную точку Twitter из bean, он отлично работает. Однако, чтобы облегчить тестирование, упростить конфигурацию и т.д., Я хотел бы сохранить фактическую конфигурацию Twitter, поэтому вы хотите отправить ее на отдельный маршрут.
Конфигурация контекста верблюда выглядит так: -
<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>
bean выглядит так: -
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();
}
}
}
У меня была эта проблема на других маршрутах (она, конечно же, не связана с функцией Twitter), но только что сработала. На этот раз, однако, я хотел бы на самом деле понять, в чем проблема! Любая помощь с благодарностью получена, спасибо.