I want to get better at Camel route design and would welcome any thoughts on
the below.

  Thanks, Steve

Here's what I need to implement:

- *FROM:* receive UDP datagrams in ISO-8859-1 format.  For this I use the
camel-netty component.

- *ACK:* Each received UDP datagram must be acknowledged by extracting a
cookie from the received datagram
  and formulating the ACK using this cookie. For this function, I have an
AckBackProcessor that
  implements org.apache.camel.Processor.

  To sent the acknowledgement, the AckBackProcessor is basically doing:

        exchange.getOut().setBody(ackBack.toString());
        exchange.getOut().setHeaders(exchange.getIn().getHeaders()); // Copy
headers from IN to OUT to propagate them.

-* TO:* Each received datagram must be optionally forwarded (i.e. mirrored)
to a secondary remote host via UDP.
      For this function, I'm currently using the EIP WireTap pattern with a
destination of netty:udp://host:port etc.
          Maybe I should be using SEDA, not sure?

- *TO: *Log each received UDP datagram to a local backup file using the
Camel log component and the underlying
  SLF4J/Log4j2 logging system.
  
- *TO:* Log each received UDP datagram to the local file system for
throughput logging using the Camel log component
  and the underlying SLF4J/Log4j2 logging system.  This is for the Camel
Throughput logger capability.
  
- *TO:* Implement the Camel DeadLetterChannel (use original message), with
the DLC queue being the local
  file system, and using the underlying SLF4J/Log4j2 logging system.  

- *TO:* Wrap each received UDP datagram in a custom JSON wrapper and send to
a Kafka topic using a synchronous producer.
  I use the camel-kafka component for this and I have an KafkaProcessor that
implements org.apache.camel.Processor.
  This processor handles the Kafka partitioning. I have another
PayloadWrapperProcessor that adds the customn JSON wrapper.
  
  
Here's basically what my route looks like.  Just want to be sure I'm on the
right track. Any feedback and/or
improvements is greatly appreciated!!!

        from(fromURI)
                .routeId(sourceRouteId)
                .startupOrder(routeStartupOrder)
                .setProperty(Exchange.CHARSET_NAME,
ExpressionBuilder.constantExpression("ISO-8859-1"))
                .wireTap(mirrorToURI)
                        .id(sourceRouteId + "_MIRROR")
                .to(firstToURIs) // to(backupFileToURI, throughputFileToURI, 
sedaMainURI)
                        .id(sourceRouteId + "_TO_FIRST_URIS");


        // ---------------------------------------------------------------
        // The second route (i.e. sedaMainURI --> secondToURI) has a route
        // scoped error handler. It’s a Dead Letter Channel that will
        // send failed messages to a log for subsequent re-processing.
        // ---------------------------------------------------------------
        from(sedaMainURI)
                .routeId(sedaMainRouteId)
                // -----------------------------------------------------
                // Add the route-scoped DeadLetterChannel error handler.
                // -----------------------------------------------------
                .errorHandler(deadLetterChannelBuilder)
                .threads(threadPoolSize /*poolSize*/, threadPoolSize * 2 
/*maxPoolSize*/)
                        .threadName("threads_" + sedaMainRouteId)
                .callerRunsWhenRejected(true) // Hard-coded since we always 
want this
behavior!
                // ------------------------------------------------------
                // This processor adds an MPLR header along with the
                // received exchange body and converts to wrapper format.
                // ------------------------------------------------------
                .process(payloadWrapperProcessor)
                        .id(payloadWrapperProcessorId)
                // ------------------------------------------------
                // This processor handles Kafka related processing.
                // For example, determining the Kafka partitioning.
                // ------------------------------------------------
                .process(kafkaProcessor)
                        .id(kafkaProcessorId)
                // ---------------------------------------------------
                // Here we route to the final destination (e.g. Kafka)
                // ---------------------------------------------------
                .to(secondToURI)



--
View this message in context: 
http://camel.465427.n5.nabble.com/Please-help-critique-my-route-tp5770248.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to