Spring 文件接收器和 curl 客户端的云数据流无法正常工作

Spring Cloud Data Flow does not work how is expected for file sink and curl client

在 Mac 中,与 Spring XD

合作

以下工作正常:

stream create --name orderFilter --definition "http --port=9090 | filter --expression=#jsonPath(payload,'$.countryCode').equals('US') | file --name=manolito.txt --dir=/Users/manueljordan/Desktop --mode=APPEND" --deploy

通过自己的shell以下作品:

http post --target http://localhost:9090 --data "{\"id\":\"2773\",\"countryCode\":\"US\",\"orderAmt\":\"100\"}"
http post --target http://localhost:9090 --data "{\"id\":\"2774\",\"countryCode\":\"CA\",\"orderAmt\":\"125\"}"
http post --target http://localhost:9090 --data "{\"id\":\"2775\",\"countryCode\":\"US\",\"orderAmt\":\"110\"}"

数据被过滤,输出位于/Users/manueljordan/Desktop预期的位置。

到这里一切正常。

现在迁移到 Spring Cloud Data Flow

一起工作

通过 GUI (http://localhost:9393/dashboard/index.html#/streams/definitions) 我可以创建相同的流。

再次通过shell(来自spring-cloud-dataflow-shell)进行以下工作:

  http post --target http://localhost:9090 --data "{\"id\":\"2773\",\"countryCode\":\"US\",\"orderAmt\":\"100\"}"
  http post --target http://localhost:9090 --data "{\"id\":\"2774\",\"countryCode\":\"CA\",\"orderAmt\":\"125\"}"
  http post --target http://localhost:9090 --data "{\"id\":\"2775\",\"countryCode\":\"US\",\"orderAmt\":\"110\"}"

用于 Spring XD

的同一个 http post

情况 01 即使上面的三个 http post 处理过滤器行为,输出文件 not 创建在 /Users/manueljordan/Desktop 中,它是在 /private/var/folders/nf/ql69b5zd7w54jw6nb5zmvck80000gn/T/dataflow/output 而不是

中创建的

观察 ql69b5zd7w54jw6nb5zmvck80000gn

中的 dataflow 目录

为什么会出现这种行为?如何解决这个问题?缺少一些特殊配置?

关于 cURL 的情况 02,根据参考文档,在 10.1. Endpoints 部分,实际上就在 Figure 3. The Spring Cloud Data Flow Server 表明 cURL 也可以使用。

通过iterm 2如果我使用以下命令:(它符合How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?

curl -H "Content-Type: application/json" -X POST -d '"{\"id\":\"2773\",\"countryCode\":\"US\",\"orderAmt\":\"100\"}"' http://localhost:9090
curl -H "Content-Type: application/json" -X POST -d '"{\"id\":\"2774\",\"countryCode\":\"CA\",\"orderAmt\":\"125\"}"' http://localhost:9090
curl -H "Content-Type: application/json" -X POST -d '"{\"id\":\"2775\",\"countryCode\":\"US\",\"orderAmt\":\"110\"}"' http://localhost:9090

没有任何反应(我按回车执行命令,只是传递到换行提示符,仅此而已)。为什么?缺少什么?

在这里查看答案:https://github.com/spring-cloud/spring-cloud-dataflow/issues/1587#issuecomment-313266803

我们同时监控 SO 和 GitHub 问题,因此无需交叉 post。

-托马斯