2016-03-24 12 views
1

どのようにMongoDB(ラクダのMongoDB)からオブジェクトとペイロードを豊かにするために、私はMongoDBのからオブジェクトを引っ張って、私の現在のペイロードに追加し、別のデータベースに保存しようとしている

@Override 
public void configure() throws Exception 
{ 
    from(kafkaEndpoint) 
      .convertBodyTo(DBObject.class) 
      .enrich("mongodb:mongoDb?database=myDbName1&collection=UserColl&operation=findOneByQuery", 
        (original, external) -> { 
         DBObject originalBody = original.getIn().getBody(DBObject.class); 
         DBObject externalBody = external.getIn().getBody(DBObject.class); 

         Map<String, DBObject> map = new HashMap<String, DBObject>(); 
         map.put("original", originalBody); 
         map.put("external", externalBody); 

         original.getIn().setBody(map); 
         return original; 
        }) 
      .to("mongodb:mongoDb?database=myDbName2&collection=UserColl&operation=insert"); 
} 

問題その充実私の元のオブジェクトを保持しているIn.bodyからクエリを取得...

は、どのように私は、クエリを渡すことができます( {「entity.id」:「」}エンリッチ(mongoldbへ: ...)元のオブジェクトを保存して結果とマージしますか?

ありがとうございました。

答えて

0
@Override 
    public void configure() throws Exception 
    { 
     from(kafkaEndpoint) 
       .convertBodyTo(DBObject.class) 
       .enrich("direct:findOneByQuery",  // <------- 
         (original, external) -> { 
          DBObject originalBody = original.getIn().getBody(DBObject.class); 
          DBObject externalBody = external.getIn().getBody(DBObject.class); 

          Map<String, DBObject> map = new HashMap<String, DBObject>(); 
          map.put("original", originalBody); 
          map.put("external", externalBody); 

          original.getIn().setBody(map); 
          return original; 
         }) 
       .to("mongodb:mongoDb?database=myDbName2&collection=UserColl&operation=insert"); 

    } 

    from("direct:findOneByQuery") 
      .process(new Processor() 
      { 
       @Override 
       public void process(Exchange exchange) throws Exception 
       { 
        DBObject body = exchange.getIn().getBody(DBObject.class); 
        DBObject query = BasicDBObjectBuilder.start() 
          .append("entity._id", body.get("_id")) 
          .get(); 

        exchange.getIn().setBody(query); 
       } 
      }) 
      .to("mongodb:mongoDb?database=myDbName1&collection=UserColl&operation=findOneByQuery"); 

// 
+0

私はこの方法を使用しようとしていましたが、「エンドポイントで利用できる消費者はありません:direct:// findOneByQuery」と表示されます。これはあなたが遭遇した何かですか? –

+0

"エンリッチ"でmongodbコンポーネントを使用しようとすると発生するその他のエラーは次のとおりです。 "エンドポイント用プロデューサの作成に失敗しました:mongodb3 nullPointerException" –

関連する問題