gpt4 book ai didi

apache-camel - Apache Camel 端点注入(inject)到直接路由 "No consumers available on endpoint"

转载 作者:行者123 更新时间:2023-12-03 22:09:33 24 4
gpt4 key购买 nike

我想使用 Camel 从 ActiveMQ 获取消息,然后根据消息内容(protobuf)向 Twitter 发送一条或多条消息。我编写了一个从路由中调用的 bean,它使用注入(inject)将多条消息发送到“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]

如果我直接从 bean 中注入(inject)到 Twitter 端点,它工作正常。但是,为了简化测试、简化配置等,我想将实际的 Twitter 配置分开,因此希望发送到单独的路由。

Camel 上下文配置如下所示:-
<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&amp;consumerSecret=itsasecret&amp;accessToken=itsasecret&amp;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 功能无关),但刚刚解决了这个问题。但是,这一次,我想真正了解问题所在!感谢任何帮助,谢谢。

最佳答案

根据您的设置,它可能还取决于 CamelContext你捡起来了。我收到了同样的错误消息,因为我在另一个 CamelContext 中存在的路由上发送消息比我实际使用的那个。

(尽管先前的答案已被接受,但这可能是其他人搜索该错误消息的有效解决方案。)

关于apache-camel - Apache Camel 端点注入(inject)到直接路由 "No consumers available on endpoint",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13414743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com