我正在尝试使用docker compose对用Apache Camel编写的集成进行docker化。应用程序结构如下所示:
当我运行应用程序并尝试将数据插入数据库时,数据应以json形式发送到rest api,并在sftp服务器上以csv形式结束。该应用程序在本地运行良好,但在将数据插入数据库后作为docker网络,JAXB无法在两个输出适配器中解组数据。我想稍后使用自己的映射器将它们映射到适当的数据类型。对于每条消息,我都会收到如下错误:
sender_1IllegalArgumentExctive:读取器不能为空
sftp-xecutor.schedule|在sender_1Unmarshallisender_10(Unmarshallisender_1)sftp-xecutor.java:64|在sender_1Unmarshallisender_1(Unmarshallisender_1)sftp-org.apache.camel.processor.|在sender_1JaxbDataFsender_1(JaxbDataFsender_1)sftp-ipeline.process|在sender_1UnmarshalPsender_1(UnmarshalPsender_1)sftp-ipeline.java:184|在sender_1ReDeliveryErrorHandler$SimpleTsender_1(ReDeliveryErrorHsender_1)sftp-org.apache.camel.impl.engine.|在org.apache.camel.impl.engine.DefaultReactiveExecator$Worker.schedule(DefaultReactiveExecutor.java:193)sftp-rocessor.process|在org.apache.camel.impl.engine.DefaultReactiveEjava.lang.Main(DefaultReactiveEcom.sun.xml.bind.v2.runtime.unmarshaller.)sftp-rocessor.java:399|在mpl.unmarshalPmpl.java:370(Pcom.sun.xml.bind.v2.runtime.unmarshaller.)sftp-org.apache.camel.impl.engine.|在mpl.unmarshalCamelInternalPmpl.java:356(CamelInternalPorg.apache.camel.converter.jaxb.)sftp-ormat.java:300|在ormat.unmarshalDefaulAbstractPollingMessageListenerContainer. doReceiveAndExecute(AbstractPollingMessageListenerContainer. java: 318)sftp-sender_1|at org. springframework. jms. listener. AbstractPollingMessageListenerContainer. RecveAndExecute(AbstractPollingMessageListenerContainer. java: 257)sftp-sender_1|at org. springframework. jms. listener. DefaultMessageListenerContainer$AsyncMessageListenerInvoker. java: 1237)sftp-sender_1|at org. springframework. jms. listener. DefaultMessageListenerContainer$AsyncMessageListenerInvoker. java: 1227)sftp-sender_1|at org. springframework. jm
对于rest发送器,错误看起来非常相似。sftp发送方的Dockerfile:
COPY ./target/toSftp-1.0-SNAPSHOT-jar-with-dependencies.jar /app/
COPY ./src/main/resources/properties.properties /app/
WORKDIR /app
ENV PROPERTIES_LOCATION=/app/properties.properties
CMD ["java","-jar","toSftp-1.0-SNAPSHOT-jar-with-dependencies.jar"]
Camel RouteBuilder:
new RouteBuilder() {
@Override
public void configure() throws Exception {
JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
DataFormat dataFormat = new JaxbDataFormat(jaxbContext);
from("activemq:topic:MATERIALS_ENRICHED?clientId=2137&durableSubscriptionName=foo1")
.to("log:?level=INFO&showBody=true&showHeaders=true")
.unmarshal(dataFormat)
.filter(simple("${body.isDeleted} == 'false'"))
.bean(CSVMapper.class, "process")
.to("sftp:{{sftp-user}}@{{sftp-host}}:{{sftp-port}}/{{sftp-user}}/data?password={{sftp-password}}");
}
}
这就是码头工人的作品。yml:
version: "3.8"
networks:
materials:
services:
activemq:
image: rmohr/activemq
ports:
- "61616:61616"
- "8161:8161"
networks:
- materials
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: zaq1@WSX
MYSQL_DATABASE: Materials
MYSQL_USER: root
MYSQL_PASSWORD: zaq1@WSX
volumes:
- /storage/docker/mysql-data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- materials
sftp:
image: atmoz/sftp
volumes:
- /storage/docker/sftp:/home/sftp_user/upload
ports:
- "2222:22"
command: sftp_user:zaq1@WSX:1001
networks:
- materials
mock:
image: mock
command:
-logLevel DEBUG -serverPort 1090 -proxyRemotePort 80 -proxyRemoteHost www.mock-server.com
ports:
- "1080:1090"
networks:
- materials
input-adapter:
build: ./input
environment:
PROPERTIES_FILE: "/app/properties.properties"
depends_on:
- mysql
- activemq
networks:
- materials
rest-sender:
build: ./output/toRest
environment:
PROPERTIES_FILE: "/app/properties.properties"
depends_on:
- activemq
- mock
networks:
- materials
sftp-sender:
build: ./output/toSFTP
environment:
PROPERTIES_FILE: "/app/properties.properties"
depends_on:
- activemq
- sftp
networks:
- materials
请帮帮我,我已经挣扎了好几天了。谢谢
您启用了流缓存(https://camel.apache.org/manual/stream-caching.html)吗?
因为,流被读取两次:
>
。至(“日志:?级别=信息
散集格式
试着评论1。看看解包是否更有效
我想从JMS中检索一些数据,过滤它们并发送到REST服务器。当我解组这些数据时,我得到一个错误: java.lang.IllegalArgumentException:读取器不能为空 位于com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshalleImpl.unmarshall0(UnmarshallerImpl.java:370)位于com.sun.x
我的docker撰写。yml是: Dockerfile是: application.properties TestDbConfig.java 当我构建我的应用程序映像时,一切正常,然后我应该启动我的数据库映像和应用程序映像。我用启动db,我得到了:。我的DbConfig有问题吗?如果我在本地启动我的应用程序,而不是在Docker容器中启动我的应用程序,我的应用程序成功连接到数据库,我可以做我想做的
启动一个名为nginx的Dockerized应用程序,然后在其中执行bash。令我吃惊的是,我在那个容器里找不到vim、vi甚至是yum。 请原谅我,因为我是非常新的docker和学习。 下面的命令可以用来再现问题。 我的主机是Ubuntu16.04,我使用的是最新的docker-engine和docker cli 请不要使用我的主机名(我已从15.04升级):slight_smile: 如有任何
我在Centos7机器上安装了Docker,DNS不能在容器中工作。 因此,如果我在主机上运行,它将正确解析。但是,如果我执行,我会得到: 更新:这不仅发生在busybox上,在其他平台上也是如此。我的主要问题是无法运行从以下DockerFile构建的映像容器: docker-compose.yml: 这项服务运行良好,并在我的个人机器上运行最新的Ubuntu进行了测试
我已经创建并将php-apache容器与MYSQL容器链接起来。但是当我试图从php文件中使用PDO建立连接时,我得到了错误。有人知道怎么修好它吗?多谢了。 PDO错误: 致命错误:未捕获的PDOException:PDO::__Construct():php_network_getAddress:getaddrinfo失败:名称或服务在/var/www/html/index.php:3 Stac
假设我有一堆不同的docker容器,它们都是基于Python3.5的。在Ubuntu系统上使用Python3.5将所有任务作为后台进程同时运行(假设是5、10或20个容器),这一任务是否会使用更多/更少的资源?