我已经使用Groovy DSL创建了骆驼(2.20.1)路由。我需要为2个端点使用多播。 ftps和文件。如果路由的顺序是ftps和file,则file是在ftp服务器上写入的属性,但在文件系统上写入的是空文件(大小为0字节)。如果我颠倒顺序,即文件然后是ftps,则文件将正确写入文件系统,空文件将写入ftp服务器。 在Apache Mina FTP服务器上运行正常,但在客户端ftp服务器上,运行如上所述。
我尝试了两个多播选项:
.to("ftps:....").to("file:...")
以及
.to("ftps:...").to("file:..."))
也尝试过parallelProcessing()
,但结果仍然相同。
camelContext.addRoutes(new RouteBuilder() {
def void configure() {
from("file:///home/xyz/?fileName=file.txt&charset=utf-8&noop=true")
.multicast()
.to("ftps://localhost:21/files?username=anonymous&password=anonymous&binary=true&fileName=file.txt&passiveMode=true&fileExist=Fail")
.to("file://${directory}?fileName=\${file:name}-\${date:now:yyyyMMddHHmmssSSS}")
}
})
我希望多播应将相同的内容写入两个端点而不会丢失数据。
答案 0 :(得分:0)
请参见Why is my message empty?。文件使用者返回SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tbl_name'
[AND table_schema = 'db_name']
[AND column_name LIKE 'wild']
,它由第一个端点使用,因此对于第二个端点为空。多播之前,您需要启用Stream Caching或将主体转换为某些可重用的对象(例如InputStream
)。
启用流缓存:
String
转换正文:
from("file:///home/xyz/?fileName=file.txt&charset=utf-8&noop=true")
.streamCaching()
.multicast()
...