Hello
So I can either create a producer route with
from("ftp://...").converBodyTo(...).to("direct:result")
and use
String s = camel.createConsumerTemplate().receiveBody("direct:result",
String.class);
or I create a consumer route with
from("direct:getFile").pollEnrich("ftp://...").convertBodyTo(...)
and use
String s =
camel.createFluentProducerTemplate().to("direct:getFile").request(String.class);
Is there any difference or preferred style?
For some reasons, the first one takes 2s whereas the second one finishes
in only 0.02s. The first also gives a warning, even if I explicitly call
consumerTemplate.stop(), why?
"Waiting as there are still 1 inflight and pending exchanges to complete,
timeout in 300 seconds. Inflights per route: [route1 = 1]"
-christian-
Am Wed, 8 Feb 2017 12:03:27 +0100
schrieb "Condello, Giovanni" <[email protected]>:
> Hi,
> There's no need for two routes, unless your use case is more complex
> than the example you provided.
>
> You can just use something like this:
>
> context.start();
>
> /* Now camel is ready */
>
> ProducerTemplate template = context.createProducerTemplate();
>
> String result = template.requestBody("direct:blah", null,
> String.class);
>
> /* This will block until your route produces something */
>
>
> context.stop()
>
>
> 2017-02-08 11:57 GMT+01:00 Christian Brunotte <[email protected]>:
> > Hello Zoran
> >
> > So what you propose is (in pseudocode):
> >
> > RouteBuilder builder = new RouteBuilder() {
> > from("direct:start")
> > .enrich("file://src/main/resources/inputs/test.txt")
> > ...
> > .to("direct:result");
> > }
> >
> > CamelContext camel = new DefaultCamelContext();
> > camel.addRoutes(simpleRoute);
> > camel.start();
> > camel.createProducer().send("direct:start");
> > String result = camel.createConsumer().receiveBody("direct:result",
> > String.class); camel.stop();
> >
> > That would start the Camel Engine but it would wait for a command
> > ("direct:start") before it does anything and then would have to be
> > manually be polled, correct?
> >
> > Best Regards,
> >
> > -christian-
> >
> > Am Wed, 8 Feb 2017 09:41:24 +0100
> > schrieb Zoran Regvart <[email protected]>:
> >
> >> Hi Christian,
> >> bare in mind that you can have control if you use direct
> >> component, so having Camel context/routes started, doesn't mean
> >> that it needs to poll in the background, you can do that on demand,
> >>
> >> HTH,
> >>
> >> zoran
> >>
> >> On Tue, Feb 7, 2017 at 10:56 PM, Christian Brunotte
> >> <[email protected]> wrote:
> >> > Hello
> >> >
> >> > I'd like to integrate Apache Camel into an existing project and
> >> > just use some of it's endpoint capabilities (ftp, file, sftp
> >> > etc.) to fetch some files and maybe validate them a bit.
> >> >
> >> > I don't want Camel to act as the main controller that dispatches
> >> > everything in the background.
> >> >
> >> > Is it possible to use Camel in a very simplistic and lean way
> >> > like e.g.:
> >> >
> >> > RouteBuilder simpleRoute = new RouteBuilder() {
> >> > @Override
> >> > public void configure() {
> >> >
> >> > from("file://src/main/resources/inputs/?include=input.*\\.txt&noop=true")
> >> > .convertBodyTo(String.class)
> >> > .validate(body().regex("..."));
> >> > }
> >> > };
> >> >
> >> > String result =
> >> > CamelContext.createSimpleConsumerTemplate(simpleRoute).receiveBody(String.class);
> >> >
> >> > Currently it seems that I still have to add the route to the
> >> > CamelContext, start it, then call my ConsumerTemplate and after
> >> > that stop the context.
> >> >
> >> > Best Regards
> >> >
> >> > -christian-
> >>
> >>
> >>