【问题标题】:How to enrich the payload with an object from MongoDB (camel-mongodb)如何使用来自 MongoDB (camel-mongodb) 的对象来丰富有效负载
【发布时间】:2016-07-12 06:56:53
【问题描述】:

我正在尝试从 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");
}

enrich 从包含我的原始对象的 In.body 中获取查询的问题...

那么我如何将查询 ({"entity.id": ""}) 传递给 enrich(mongoldb:...) 并保留原始对象以进行合并有结果吗?

谢谢。

【问题讨论】:

    标签: mongodb apache-camel enterprise-integration


    【解决方案1】:
        @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");
    
     //
    

    【讨论】:

    • 我一直在尝试使用这种方法,但是我总是得到“端点上没有可用的消费者:direct://findOneByQuery”。你也遇到过这种情况吗?
    • 如果我尝试在“enrich”中使用 mongodb 组件出现的另一个错误是:“Failed to create Producer for endpoint: mongodb3 nullPointerException”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    相关资源
    最近更新 更多