Приложение Spring Boot Apache Camel не обслуживает запросы в контейнере - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть приложение Spring Boot + Apache Camel со следующими зависимостями, перечисленными в файле POM следующим образом.

<properties>
    <fuse-version>fuse-000112-redhat-3</fuse-version>
    <camel-version>2.21.0.${fuse-version}</camel-version>
    <cxf-version>3.2.7</cxf-version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.0.5.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>



    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <version>${camel-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring</artifactId>
        <version>${camel-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-cxf</artifactId>
        <version>${camel-version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-shiro</artifactId>
        <version>${camel-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jms</artifactId>
        <version>${camel-version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http-jetty</artifactId>
        <version>${cxf-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
        <version>${cxf-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-extension-providers</artifactId>
        <version>${cxf-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-security-cors</artifactId>
        <version>${cxf-version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>${jackson2.version}</version>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>2.0.5.RELEASE</version>
    </dependency>
</dependencies>

in Теперь у меня есть следующие маршруты, определенные в camel-context.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xmlns:ctx="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd




       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">



    <camelContext trace="false" id="paymentRestCC" allowUseOriginalMessage="true"
                  xmlns="http://camel.apache.org/schema/spring">

        <propertyPlaceholder id="properties"
                             location="classpath:application.properties"/>

        <threadPoolProfile id="bigPool" defaultProfile="true"
                           poolSize="10" maxPoolSize="{{rest.thread.max.pool.size}}"
                           maxQueueSize="{{rest.thread.max.queue.size}}" allowCoreThreadTimeOut="false"
                           rejectedPolicy="CallerRuns"/>

        <route id="RESTPaymentRoute">
            <from
                    uri="cxfrs:bean:restPaymentService?resourceClass=com.interswitchng.techquest.payment.service.rest.consumer.resources.PaymentRestRequestResource&amp;continuationTimeout={{continuation.timeout}}"/>
            <bean ref="restUtil" method="setRequestStartTime"/>
            <threads executorServiceRef="bigPool" callerRunsWhenRejected="true">
                <bean ref="restUtil" method="printRequestTimeInQueue"/>
                <bean ref="restUtil" method="getGenerateTransIdStartTime"/>
                <to uri="bean-tranIdGenerator-async://tranIdGeneratorEndpoint"/>
                <bean ref="restUtil" method="printGenerateTransIdEndTime"/>
                <!-- <throttle> -->
                <!-- <constant>40</constant> -->
                <to uri="direct-vm:paymentV1Rest"/>
                <!-- </throttle> -->
            </threads>
        </route>
</beans>

Я запускаю приложение со следующим кодом

@SpringBootApplication
@EnableAutoConfiguration()
public class PaymentServiceRestApplication {
    private static ClassPathXmlApplicationContext applicationContext;

    public static void main(final String[] args) throws Exception {
        applicationContext = new ClassPathXmlApplicationContext("camel-context.xml");
        applicationContext.start();
        SpringContextHolder.setStaticApplicationContext(applicationContext);
        ((LoggerContext) LoggerFactory.getILoggerFactory()).getLogger("org.mongodb.driver").setLevel(Level.ERROR);
    }
}

Приложение запускается правильно и обслуживает запросы в обычном режиме.Теперь проблема возникает, когда я упаковываю это приложение с помощью Docker.Мой файл Docker выглядит следующим образом:

FROM java:8

LABEL maintainer="babajide.apata@interswitchgroup.com"

ENV http_proxy 'http://x.x.x.x:6060/'
ENV https_proxy 'http://x.x.x.x:6060/'
ENV NO_PROXY 'localhost,127.0.0.1,0.0.0.0,192.168.10.0/24,example.com'

RUN apt-get update && apt-get install -y \
    telnet

#Change OS time zone
RUN mv -f /etc/localtime /etc/localtime.bak
RUN ln -s /usr/share/zoneinfo/Africa/Lagos /etc/localtime

ADD payment-service-rest/target/service.jar.jar /opt/p-rest/service.jar

WORKDIR /opt/p-rest

EXPOSE 19080

CMD cat /etc/hosts; java -jar payment-service-rest-4.x.team5-dev.jar;

Контейнер запускается правильно, но на удивление, когда я пытаюсь получить доступ к сервису через открытый порт извне контейнера, из журналов видно, что запросы больше не выполняются.попадает в приложение.Я могу telnet с хоста в контейнер с помощью открытого порта успешно, но запросы не попадают в приложение полностью следит за мной.

...