1

我有这条路线

from(URI_WEBSERVICE)
.convertBodyTo(Entrada.class)
.process(new ProcessorTratarWS()) 
.pollEnrich("ftp://10.100.8.2/entradaCamel?username=USER&password=PASSWORD&delete=true&fileName=${property.archivoRespuesta}", timeOut, new EstrategiaConfirmacion())
.to(WS_RESPONDER)

ProcessorTratarWS()中,我设置了 property.archivoRespuesta 的值,并且是 pollEnrich 应该下载的文件的名称。

但是,文档说“ PollEnrich 无法访问交易所”。这意味着 PollEnrich 无法读取 ${property.archivoRespuesta} 的值

在骆驼中有一些替代方法可以做我正在尝试的同样的事情吗?

谢谢!

4

2 回答 2

2

来自http://camel.apache.org/content-enricher.html

...您可以使用收件人列表并拥有动态端点并在收件人列表上定义一个 AggregationStrategy 而不是使用丰富,然后它将像丰富一样工作。...

尝试类似:

from(URI_WEBSERVICE)
.convertBodyTo(Entrada.class)
.process(new ProcessorTratarWS()) 
.recipientList(simple("ftp://10.100.8.2/entradaCamel?username=USER&password=PASSWORD&delete=true&fileName=${property.archivoRespuesta}")).aggregationStrategy(new EstrategiaConfirmacion())
.to(WS_RESPONDER)

编辑:

上面的代码是将文件保存在 FTP 服务器中。如果您想从 FTP 服务器轮询文件,您可以尝试

        from(URI_WEBSERVICE)
            .convertBodyTo(Entrada.class)
            .process(new Processor() {
                @Override
                public void process(Exchange exchange) throws Exception {
                    // logic of ProcessorTratarWS goes here
                    ConsumerTemplate consumer=exchange.getContext().createConsumerTemplate();
                    String filename=exchange.getProperty("archivoRespuesta",String.class);                  
                    Object file=consumer.receiveBody("ftp://10.100.8.2/entradaCamel?username=USER&password=PASSWORD&delete=true&fileName="+filename,timeOut);
                    // logic of EstrategiaConfirmacion goes here
            }

        })
        .to(WS_RESPONDER);  

免责声明:我没有太多使用轮询消费者,可能会有更优雅/高效的解决方案

于 2015-07-02T13:16:00.237 回答
0

您可以使用“简单”表达式,也可以在字符串中使用“exchangeProperty”而不是“property”

from(URI_WEBSERVICE)
.convertBodyTo(Entrada.class)
.process(new ProcessorTratarWS()) 
.pollEnrich().simple("ftp://10.100.8.2/entradaCamel?username=USER&password=PASSWORD&delete=true&fileName=${exchangeProperty.archivoRespuesta}")
.timeout(timeOut)
.aggregationStrategy(new EstrategiaConfirmacion())
.to(WS_RESPONDER)
于 2022-01-13T09:03:46.910 回答