【发布时间】:2018-09-05 11:59:11
【问题描述】:
我有三个骆驼路线单独运行良好,我试图在第一条路线完成后调用第二条路线,但是一旦我使用 URL jetty:http://localhost:8181/mongoSelect 调用第二条路线,它是如何没有被启动的,第三条路线是如何运行的,我在控制台上也没有错误。我已经尝试用direct: 组件更改from("jetty:http://localhost:8181/mongoSelect"),请帮助我。
常量
private static final String SOURCE = "file:\\workspace\\EmailResponseAutomationSTS\\response\\?noop=true";
private static final String DESTINATION = "mongodb:myDb?database=email_response&collection=emailResponse&operation=save";
private static final String QUERY_MONGO_DB = "mongodb:myDb?database=email_response&collection=emailResponse&operation=findAll";
第一条路线
from(SOURCE)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
final EmailResponseModel erm = new EmailResponseModel();
erm.setBody(exchange.getIn().getBody(String.class));
exchange.getIn().setBody(erm, DBObject.class);
}
})
.to(DESTINATION)
.end();
第二条路线
from("jetty:http://localhost:8181/mongoSelect")
.to(QUERY_MONGO_DB)
.marshal(new JacksonDataFormat())
.to("direct:redis")
.end();
第三条路线
from("direct:redis").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
final String name = exchange.getIn().getBody(String.class);
@SuppressWarnings({ "deprecation", "unchecked" })
List<BasicDBObject> obj = (List<BasicDBObject>) JSON.parse(name);
for(BasicDBObject model : obj) {
String s = model.getString("body");
jedis.set("mongoData", s);
}
jedis.close();
}
})
.end();
我已经尝试过这种方法:
第一条路线
from(SOURCE)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
final EmailResponseModel erm = new EmailResponseModel();
erm.setBody(exchange.getIn().getBody(String.class));
exchange.getIn().setBody(erm, DBObject.class);
}
})
.to(DESTINATION)
.to("direct:mongoSelect")
.end();
第二条路线
from("direct:mongoSelect")
.to(QUERY_MONGO_DB)
.marshal(new JacksonDataFormat())
.to("direct:redis")
.end();
更新:我的代码发生了一些奇怪的事情,当我使用direct:mongoSelect 组件从第一条路线调用第二条路线时,控制正在移动,但没有来自.to(QUERY_MONGO_DB) 的响应数据,但是,如果我在第二条路线中使用 from("jetty:http://localhost:8181/mongoSelect") 而不是 from("direct:mongoSelect"),我将获得数据作为响应。
第一条路线
from(SOURCE)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
final EmailResponseModel erm = new EmailResponseModel();
erm.setEmailBody(exchange.getIn().getBody(String.class));
exchange.getIn().setBody(erm, DBObject.class);
}
})
.to(DESTINATION)
.to("direct:mongoSelect");
第二条路线
from("direct:mongoSelect")
.to(QUERY_MONGO_DB)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
String srt = exchange.getIn().getBody(String.class);
exchange.getIn().setBody(srt, DBObject.class);
}
})
.to("direct:redis")
.end();
【问题讨论】:
-
什么是目的地?
-
@pvpkiran DESTINATION 是一个 URI 常量,问题已更新,请查看。
-
在您的第一条路线完成后?你怎么称呼你的第二条路线?我没看到
-
我确实尝试使用
.to("direct:mongoSelect")将控件发送到第二条路线,但它对我不起作用。 -
你能把那部分代码放上去吗
标签: routes apache-camel enterprise-integration