Yeah. That seems better. I wish the rest component supported to

On Friday, September 10, 2021, Steve Huston <shus...@riverace.com> wrote:

> You could also use something like cxfrs to do the REST call and have it
> unmarshal your JSON return.
> That would make it easier to integrate with Mark's idea to use Camel's
> error handling and retries.
>
> -Steve
>
> > -----Original Message-----
> > From: Mark Nuttall <mknutt...@gmail.com>
> > Sent: Friday, September 10, 2021 3:51 PM
> > To: users@camel.apache.org
> > Subject: Re: .process vs .to(bean: ?
> >
> > You should use the Camel Processing to do retries.
> >
> > Also, look at using something like OpenFeign to reduce the boilerplate
> HTTP
> > call. It can be very few lines of code.
> > or you should use the Camel HTTP component.
> >
> >
> >
> > On Fri, Sep 10, 2021 at 2:00 AM Matthee, Elmar [elm...@sun.ac.za] <
> > elm...@sun.ac.za> wrote:
> >
> > > Good morning all.
> > >
> > > I'm VERY new to camel so I'm still trying to get a grip on all the
> > > various components so please bear with me.
> > >
> > > I'm using quarkus/camel and have a route where I pull a message off of
> > > a kafka topic (this part works perfectly btw) but then I want to send
> > > the string on to a REST service and based on the response I get back
> > > from the service (i.e. 200 - Ok - Go on to next message, 400 - Bad
> > > Request - throw message in an error queue or 503 - Service unavailable
> > > - Wait x amount of time and do y amounts of retries before stopping the
> > route completely).
> > >
> > > My first attempt was to do all the REST calls in a .proccess java
> class.
> > >
> > > But I now saw that you can do a .to(bean:xxx) and basically also call
> > > a java class to do all the required code etc.
> > >
> > > So my question is: what is the more "correct" way to do this
> > > (especially with regards to getting application.properties values to
> > > the java class and then sending/handeling the responses from the REST
> > > service. Would it be better to do all the error/wait handeling in the
> > > java class or rather build it into the route itself (with
> > > .errorHandler etc?)
> > >
> > > Here is my current working route code:
> > >
> > > @ApplicationScoped
> > > public class EnrollementEventRoute extends RouteBuilder {
> > >     private EnrollmentEventRestSender eers;
> > >
> > >     @ConfigProperty(name = "kafka.topic.academia.registration")
> > >     String registrationTopicName;
> > >
> > >     @ConfigProperty(name = "kafka.academia.broker")
> > >     String kafkaBroker;
> > >
> > >     @ConfigProperty(name = "kafka.academia.config.clientId")
> > >     String kafkaClientId;
> > >
> > >     @ConfigProperty(name =
> > > "kafka.academia.registration.autoOffsetReset",
> > > defaultValue = "latest")
> > >     String offset;
> > >
> > >     @ConfigProperty(name = "kafka.academia.config.groupId")
> > >     String groupId;
> > >
> > >     @ConfigProperty(name = "kafka.academia.config.keyDeserializer")
> > >     String keyDeserializer;
> > >
> > >     @ConfigProperty(name = "kafka.academia.config.valueDeserializer")
> > >     String valueDeserializer;
> > >
> > >     @ConfigProperty(name = "fms.registration.restservice.endpoint")
> > >     String restEndpoint;
> > >
> > >     @Override
> > >     public void configure() throws Exception {
> > >         eers = new EnrollmentEventRestSender(restEndpoint);
> > >         from(kafka(registrationTopicName)
> > >                 .brokers(kafkaBroker)
> > >                 .clientId(kafkaClientId)
> > >                 .groupId(groupId)
> > >                 .keyDeserializer(keyDeserializer)
> > >                 .valueDeserializer(valueDeserializer)
> > >                 .autoOffsetReset(offset))
> > >                 .log("Registration Event received: ${body}")
> > >                 .process(eers);
> > >
> > >     }
> > >
> > > And then here is the code in the EnrollmentEventRestSender class:
> > >
> > > @ApplicationScoped
> > > public class EnrollmentEventRestSender implements Processor {
> > >   private String restEndpoint;
> > >
> > >     public EnrollmentEventRestSender() {  //Dummy constructor needed.
> > >
> > >     };
> > >
> > >     public EnrollmentEventRestSender(String url) {
> > >       this.restEndpoint = url;
> > >     }
> > >
> > >
> > >
> > >     @Override
> > >     public void process(Exchange exchange) throws Exception {
> > >         try {
> > >           CloseableHttpClient client = HttpClients.createDefault();
> > >           System.out.println("Got endpoint of: " + restEndpoint);
> > >           HttpPost httpPost = new HttpPost(restEndpoint);
> > >           String json = (String) exchange.getIn().getBody();
> > >           System.out.println("Got JSON in Exchange: " + json);
> > >           StringEntity entity = new StringEntity(json);
> > >           httpPost.setEntity(entity);
> > >          // httpPost.setHeader("Accept", "application/json");
> > >           httpPost.setHeader("Content-type", "text/plain;
> charset=utf-8");
> > >           CloseableHttpResponse response = client.execute(httpPost);
> > >           System.out.println("Got Response of: " +
> > > response.getStatusLine().getStatusCode());
> > >           if (!(response.getStatusLine().getStatusCode()==200)) { //
> > > Something wrong
> > >             InputStream is = response.getEntity().getContent();
> > >             BufferedReader rd = new BufferedReader(new
> > > InputStreamReader(is));
> > >             StringBuilder errReply = new StringBuilder();
> > >             String responseLine = null;
> > >             while ((responseLine = rd.readLine()) != null) {
> > >                errReply.append(responseLine.trim());
> > >             }
> > >             rd.close();
> > >             is.close();
> > >             System.out.println(errReply);
> > >           }
> > >           client.close();
> > >         }
> > >         catch (Exception ex ) {
> > >           ex.printStackTrace();
> > >         }
> > >     }
> > >
> > > }
> > > [https://www.sun.ac.za/productionfooter/email/ProductionFooter.jpg]<
> > > https://www.sun.ac.za/english/about-us/strategic-documents>
> > >
> > > The integrity and confidentiality of this email are governed by these
> > > terms. Disclaimer<https://www.sun.ac.za/emaildisclaimer/default.aspx>
> > > Die integriteit en vertroulikheid van hierdie e-pos word deur die
> > > volgende bepalings bereƫl. Vrywaringsklousule<
> > > https://www.sun.ac.za/emaildisclaimer/default.aspx>
> > >
>

Reply via email to