阿帕奇骆驼路线没有呼叫另一条骆驼路线

时间:2018-03-27 07:26:58

标签: routes apache-camel enterprise-integration

我有三条单独运行的骆驼路线,我试图在第一条路线完成后调用第二条路线,但是有些如何在我使用网址{{1}呼叫第二条路线时未启动事件第三条路线的运行方式我在控制台上也没有错误。我已尝试使用jetty:http://localhost:8181/mongoSelect组件更改from("jetty:http://localhost:8181/mongoSelect"),请帮我解决此问题。

常量

direct:

第一条路线

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(); 组件从第一条路线调用第二条路线时,控件正在移动但是没有来自{的响应数据{1}},但如果我在第二条路线中使用direct:mongoSelect而不是.to(QUERY_MONGO_DB),我会收到数据作为回应。

第一条路线

from("jetty:http://localhost:8181/mongoSelect")

第二条路线

from("direct:mongoSelect")

2 个答案:

答案 0 :(得分:1)

试试这个。这应该有用。

refresh.onTokenRefresh();

答案 1 :(得分:1)

你似乎陷入困境,这里有一些建议可以继续。

  • 您的第一个路由从文件读取并写入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,则表示您获得 no mongodb-results 。这可能是因为来自第一条路径的消息体仍然存在,因此被用作mongodb的查询字符串。
  • 在您从数据库中读取之前,使用.setBody()设置邮件正文

如果QUERY_MONGO_DB中的mongodb查询,请阅读整个集合,如果您想阅读特定内容,请使用.setBody(constant("")).setBody([your mongodb-query])

from("direct:mongoSelect")
.setBody(constant(""))
.to(QUERY_MONGO_DB)

最后,从完整性开始,如果您将HTTP端点用于第二个路由,则表示您从mongo-db获得结果。我猜你用GET请求调用了第二条路由,因此消息的主体是空的。这意味着你从mongo-db获得了整个集合。