来自Java DSL中两个队列的Camel聚合

时间:2017-08-23 16:39:15

标签: apache-camel

我有两个队列,其中包含相同类型的对象。我想通过java DSL将它们聚合到一个队列中。谁能告诉我这是否可能?如果是这样,任何代码引用?

2 个答案:

答案 0 :(得分:0)

我相信使用Content Enricher模式在Camel中可能会这样做。

具体来说,以下范例可用于从一个队列中检索消息(其中 direct:start ),并使用来自第二个队列的消息(其中 direct:resource)对其进行丰富是)。然后,可以在 AggregationStrategy 实现类中构建组合消息。

// vars
var pageLoaded = false,
    model = null;

// functions
function anadirEquipo () {
    var cantidad = +document.getElementById('cantidad').value || 1,
        selected = model.inventory.options[model.inventory.selectedIndex],
        choice;
    
    if (pageLoaded) {
        if (+selected.value !== 0) {
            model.quantity.value = +model.quantity.value + cantidad;

            while (cantidad-- > 0) {
                choice = document.createElement('option');
                choice.text = selected.text;
                choice.value = selected.value;

                model.equipos.add(choice);
            }
        }
    }
}

function retirarEquipos () {
    var options = model.equipos.options,
        i;
        
    if (pageLoaded) {
        for (i = 0; i < options.length; i) {
            if (options[i].selected) {
                model.equipos.remove(options[i]);
                model.quantity.value--;
            
            } else {
                i++;
            } 
        }
    }
}

// init
window.onload = function () {
    model = {
        inventory: document.getElementById('inventory'),
        equipos: document.getElementById('equipos'),
        quantity: document.getElementById('quantity')
    };
    
    pageLoaded = true;
};

答案 1 :(得分:0)

如果我理解你的问题,就可以做这样的事情 如果你只需要将它们驱动到一条路线(没有任何聚合,丰富等),你可以继续这段代码:

from('direct:queue1')
    .to('direct:start');

from('direct:queue2')
    .to('direct:start');

from('direct:start')
//there goes your processing

如果您以后需要聚合它们,请使用Aggregator。或者你可以使用java-addict301的答案来解决你的问题。