javaspringapache-camelmina

How to configure route for port forwarding by Apache Camel?


Here is the codec and data format configuration:

package com.chorke.boot.jproxy.config;

import org.apache.camel.component.hl7.HL7DataFormat;
import org.apache.camel.component.hl7.HL7MLLPCodec;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

@Configuration
@ImportResource({"classpath*:/META-INF/camel/applicationContext-camel.xml"})
public class ApacheCamelConfig {

    @SuppressWarnings("unused")
    private static final Logger log = LoggerFactory.getLogger(ApacheCamelConfig.class);

    @Bean
    public HL7MLLPCodec hl7codec() {
        HL7MLLPCodec hl7codec = new HL7MLLPCodec();
        hl7codec.setCharset("UTF-8");
        return hl7codec;
    }

    @Bean
    public HL7DataFormat hl7Format() {
        HL7DataFormat hl7Format = new HL7DataFormat();
        return hl7Format;
    }
}

Here is the port forwarding route:

package com.chorke.boot.jproxy.route;

import org.apache.camel.builder.RouteBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ProxyRoute extends RouteBuilder {

    private static final Logger log =LoggerFactory.getLogger(ProxyRoute.class);

    @Override
    public void configure() throws Exception {

        from("mina2://tcp://0.0.0.0:22210?codec=#hl7codec&sync=true").process(new Processor() {
            public void process(Exchange exchange) throws Exception {
                String body = exchange.getIn().getBody(String.class);
                log.info("Port-Forwarded body:\n {}", body);
            }
        }).to("mina2://tcp://192.168.0.10:22210?codec=#hl7codec&sync=true").end();

        from("mina2://tcp://0.0.0.0:22211?codec=#hl7codec&sync=true").process(new Processor() {
            public void process(Exchange exchange) throws Exception {
                String body = exchange.getIn().getBody(String.class);
                log.info("Port-Forwarded body:\n {}", body);
            }
        }).to("mina2://tcp://192.168.0.11:22211?codec=#hl7codec&sync=true").end();

    }
}

The route summery is:

============================================
  request                 forwarded
tcp ip:port              tcp ip:port
============================================
0.0.0.0:22210            192.168.0.10:22210
0.0.0.0:22211            192.168.0.11:22211
============================================

And it's working fine, it's protocol specific for MLLP. But our goal is to route any request regardless their protocol. Lets say it could be handle any kind of request, not limited to HTTP, REST, SOAP, MLLP, SMTP, FTP, SMB or etc. Would you please help us to configure port-forwarding route regardless their protocol.


Solution

  • There is no out of the box support for protocol detection and route port forwarding in Apache Camel. You are better finding some existing product that can do that.