【问题标题】:Spring cloud data flow HttpclientSpring云数据流Httpclient
【发布时间】:2019-01-16 05:03:35
【问题描述】:

我有以下流。 问题背景

1.

rabbit --password='******' --queues=springdataflow-q --virtual-host=springdataflow --host=172.24.172.184 --username=springdataflow | transform | httpclient --url-expression='http://172.20.24.47:8080/push' --http-method=POST --headers-expression={'Content-Type':'application/x-www-form-urlencoded'} --body-expression={arg1:payload} | log

2.

我在本地运行 spring boot。

@RestController
public class HelloController {



    @RequestMapping(value = "/push", method = RequestMethod.POST,produces = {MediaType.TEXT_PLAIN})
      public String pushMessage(@RequestParam(value="arg1") String payload) {
        System.out.println(payload);
        return payload;
      } 
}
  1. 我想让兔子消息进入httpclient,作为发布请求的“arg1”参数值。意图是发布在兔子队列上的消息被休息发布点消费,消息被 SpEL 有效负载捕获。

为此,我使用body-expression = {arg1:payload},但这不起作用,可能是语法错误。

有什么建议吗?

【问题讨论】:

    标签: spring-integration spring-el spring-cloud-dataflow


    【解决方案1】:

    @RequestParam(value="arg1")实际上是关于请求参数,即?之后的URL部分,称为query stringhttps://en.wikipedia.org/wiki/Query_string

    所以,如果你真的想在查询字符串中有一个arg1=payload 对,你需要使用正确的url-expression

    --url-expression='http://172.20.24.47:8080/push?arg1='+payload
    

    【讨论】:

    • 是的,使用这个工作,现在虽然如果我向兔子发布消息'这是一个测试',我会在日志接收器中获得一个 ascii 版本:2018-08-08 21:35:16.210 INFO 28592 --- [-L-2] 日志接收器:116,104,105,115,32,105,115,32,97,32,116,101,115,116
    • 我认为在我的休息控制器 @RestController public class HelloController { @RequestMapping(value = "/push", method = RequestMethod.POST,produces = {MediaType.TEXT_PLAIN}) public String pushMessage(@RequestParam (value="arg1") 字符串有效载荷) { System.out.println(payload);返回有效载荷; } } 我想我必须改变 MediaType ?
    • 非常感谢,现在只需要弄清楚如何从rabbit一直到httpclient获取字符串然后登录
    • 一定不是produces,而是consumes
    • 好吧,假设我将生产更改为消费 {MediaType.TEXT_PLAIN} 我需要删除这个 --headers-expression={'Content-Type':'application/x-www-form-urlencoded '} 来自 httpclient 参数?
    【解决方案2】:

    这似乎可以将字符串作为有效负载传递。似乎默认情况下,有效负载变为 requestbody。 所以在休息服务上我做了一个改变: @RequestMapping(value = "/pushbody", method = RequestMethod.POST,consumes = {MediaType.TEXT_PLAIN}) 公共字符串 pushBody(@RequestBody 字符串有效负载){ System.out.println(有效负载); 返回有效载荷; }

    现在似乎工作的流是: rabbit --password='******' --queues=springdataflow-q1 --host=172.24.172.184 --virtual-host=springdataflow --username=springdataflow | httpclient --http-method=POST --headers-expression={'Content-Type':'text/plain'} --url=http://172.20.24.47:8080/pushbody |日志

    我确实在 httpclient 和 logsink 上尝试了 inputType= text/plain 建议,并在其余服务发布方法上删除了消耗和生成,但没有运气。

    【讨论】:

      猜你喜欢
      • 2017-11-02
      • 2017-09-12
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 2017-08-17
      相关资源
      最近更新 更多