Routes Apache驼峰路由不调用其他驼峰路由

Routes Apache驼峰路由不调用其他驼峰路由,routes,apache-camel,enterprise-integration,Routes,Apache Camel,Enterprise Integration,我有三条驼峰路线可以单独运行,我尝试在第一条路线完成后调用第二条路线,但在使用URLjetty调用第二条路线后如何不启动事件第三条路线运行:http://localhost:8181/mongoSelect,控制台上也没有错误。我已经尝试从(“jetty:http://localhost:8181/mongoSelect“与直接:组件,请在这方面帮助我 常数 private static final String SOURCE = "file:\\workspace\\EmailResponse

我有三条驼峰路线可以单独运行,我尝试在第一条路线完成后调用第二条路线,但在使用URL
jetty调用第二条路线后如何不启动事件第三条路线运行:http://localhost:8181/mongoSelect
,控制台上也没有错误。我已经尝试从(“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();
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)
        .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();
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)
        .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();
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)
        .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();
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();
更新:我的代码有点奇怪,当我使用
direct:mongoSelect
组件从第一个路由调用第二个路由时,控件正在移入,但没有数据响应从
.to(QUERY\u MONGO\u DB)
,但是如果我使用的是
from(“jetty:http://localhost:8181/mongoSelect")
在第二条路线中,我不是从(“direct:mongoSelect”)获取
,而是获取响应数据

第一条路线

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();
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)
        .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();
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://localhost:8181/mongoSelect
您的第一条路线应该调用它,第一条路线必须调用相同的URL

.to(DESTINATION) => Mongo-DB write
.to("[call to http://localhost:8181/mongoSelect]")
.end();
但是,如果它不需要是HTTP服务,端点
direct:mongoSelect
应该可以正常工作,正如@pvpkiran所建议的那样。但你还有其他问题:

  • 如果您使用
    direct:mongoSelect
    ,那么您将得到没有mongodb结果。这可能是因为第一条路由的消息体仍然存在,因此用作mongodb的查询字符串
  • 在从数据库读取之前,请使用
    .setBody()
    将您的消息正文设置为正确
如果
query\u MONGO\u DB
中的mongodb查询应该读取整个集合,那么如果要读取特定内容,请使用
.setBody(常量(“”)或
.setBody([您的mongodb查询])

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

最后,出于完整性考虑,您写道,如果将HTTP端点用于第二条路由,您将从mongo db获得结果。我猜您使用GET请求调用了第二条路由,因此消息的正文是空的。这意味着您从mongo db取回了整个集合。

目的地是什么?@pvpkiran DESTINATION是一个URI常量,问题已更新,请查看。第一条路线完成后?你的第二条路线怎么打?我没有看到我尝试使用
.to(“direct:mongoSelect”)
将控件发送到第二个路由,但是它对我不起作用。你能把代码的那部分放在控制台上得到这个异常吗
org.apache.camel.NoTypeConversionAvailableException:没有可用的类型转换器可以从类型com.mongodb.WriteResult转换为所需的类型:java.io.InputStream,值WriteResult{n=0,updateOfExisting=false,upsertedId=null}
这与数据类型转换有关。你需要照顾它。现在正在呼叫路线吗?是的,正在呼叫,但我不想使用
jetty:http://localhost:8181/mongoSelect
因为所有三条路线都属于同一类。这不是一种使用组件调用的方法,比如
direct:
不明白您在问什么我的意思是,我不想使用restapi调用来访问第二个路由。是否有其他方式访问它,如
direct:
组件用于控制传输。@buki是的,我的要求是,使用第一个路由在mongodb中存储文件内容,工作正常,第二个路由我必须从mongodb读取数据,这正是问题所在,我不必使用HTTP。我尝试了您的第二种方法
,从(“direct:mongoSelect”).setBody(“”)。到(QUERY\u MONGO\u DB)
,但是
。setBody(“”)
有一个编译时异常,表示类型处理器定义中的方法setBody(表达式)不适用于参数(字符串)
。抱歉,请尝试
.setBody(常量(“”)或.setBody(常量(null))。我不知道空字符串或null是否会对mongodb产生影响。我还更新了我的答案。