Apache 骆驼路线不调用另一个骆驼路线
Apache camel route not calling another camel route
我有三个骆驼路线 运行 单独很好,我试图在第一条路线完成后调用第二条路线,但有些事情如何没有启动第三条路线事件如何 运行 一次我使用 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();
试试这个。这应该有效。
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();
Second Route
from("direct:mongoSelect")
.setHeader(Exchange.HTTP_METHOD, constant("GET")) // Change it based on HTTP method type
.setHeader("Content-Type",simple("application/json"))
.setHeader("Accept", simple("application/json"))
.to("jetty:http://localhost:8181/mongoSelect")
.to(QUERY_MONGO_DB)
.marshal(new JacksonDataFormat())
.to("direct:redis")
.end();
您似乎被卡住了,这里有一些建议可以帮助您继续前进。
- 您的第一条路线从文件读取并写入 mongo-db
- 最初,它没有调用第二条路由
如果 要求 第二条路由是 HTTP 服务 监听 http://localhost:8181/mongoSelect
而你的第一条路由应该调用它,第一条路线必须调用相同的 URL。
.to(DESTINATION) => Mongo-DB write
.to("[call to http://localhost:8181/mongoSelect]")
.end();
但是,如果它不需要是 HTTP 服务,端点 direct:mongoSelect
应该可以正常工作,正如@pvpkiran 所建议的那样。但是你还有其他问题:
- 你写道,如果你使用
direct:mongoSelect
,你会得到 没有 mongodb-results。这可能是因为来自第一条路由的消息正文仍然存在,因此用作 mongodb. 的查询字符串
- 在从数据库中读取
之前,将消息正文设置为.setBody()
正确
如果 QUERY_MONGO_DB
中的 mongodb-query 要阅读整个合集,请使用 .setBody(constant(""))
或 .setBody([your mongodb-query])
如果您想阅读特定内容。
from("direct:mongoSelect")
.setBody(constant(""))
.to(QUERY_MONGO_DB)
最后,出于完整性考虑,您写道,如果您将 HTTP 端点用于第二条路由,您会从 mongo-db 获得结果。我猜你用 GET 请求调用了第二条路由,因此消息的主体是空的。这意味着您从 mongo-db.
取回了整个集合
我有三个骆驼路线 运行 单独很好,我试图在第一条路线完成后调用第二条路线,但有些事情如何没有启动第三条路线事件如何 运行 一次我使用 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();
试试这个。这应该有效。
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();
Second Route
from("direct:mongoSelect")
.setHeader(Exchange.HTTP_METHOD, constant("GET")) // Change it based on HTTP method type
.setHeader("Content-Type",simple("application/json"))
.setHeader("Accept", simple("application/json"))
.to("jetty:http://localhost:8181/mongoSelect")
.to(QUERY_MONGO_DB)
.marshal(new JacksonDataFormat())
.to("direct:redis")
.end();
您似乎被卡住了,这里有一些建议可以帮助您继续前进。
- 您的第一条路线从文件读取并写入 mongo-db
- 最初,它没有调用第二条路由
如果 要求 第二条路由是 HTTP 服务 监听 http://localhost:8181/mongoSelect
而你的第一条路由应该调用它,第一条路线必须调用相同的 URL。
.to(DESTINATION) => Mongo-DB write
.to("[call to http://localhost:8181/mongoSelect]")
.end();
但是,如果它不需要是 HTTP 服务,端点 direct:mongoSelect
应该可以正常工作,正如@pvpkiran 所建议的那样。但是你还有其他问题:
- 你写道,如果你使用
direct:mongoSelect
,你会得到 没有 mongodb-results。这可能是因为来自第一条路由的消息正文仍然存在,因此用作 mongodb. 的查询字符串
- 在从数据库中读取 之前,将消息正文设置为
.setBody()
正确
如果 QUERY_MONGO_DB
中的 mongodb-query 要阅读整个合集,请使用 .setBody(constant(""))
或 .setBody([your mongodb-query])
如果您想阅读特定内容。
from("direct:mongoSelect")
.setBody(constant(""))
.to(QUERY_MONGO_DB)
最后,出于完整性考虑,您写道,如果您将 HTTP 端点用于第二条路由,您会从 mongo-db 获得结果。我猜你用 GET 请求调用了第二条路由,因此消息的主体是空的。这意味着您从 mongo-db.
取回了整个集合