使用http-client的Spring xd问题

时间:2015-11-20 03:29:53

标签: rabbitmq spring-integration spring-xd

我有一个带有rabbitmq的spring xd模块作为传输。我的模块有http源http客户端处理器,它调用一个休息URL http://x.y.z/test

stream create --name cycletest4 --definition "http |  http-client --url='''https://x.y.z/test''' --httpMethod=GET | log" 

http post --data '{ "messageAttribute": { "channelType" : "EML", "contentKey" : "20020", "messageFormat" : "1", "contentSubscriber" : "dmttts", "languageCode" : "en-ca" }, "substitutionKeyValueData" : { "SvcgLOBCd": "CA", "User": "user", "phone": "yyyy, "accountLast": "tttt", "userName": "LP", "Company": "bbbb", "firstName": "Ryan" } }'

现在,当我的其他客户端抛出任何异常,如404或连接超时异常时,消息将返回http | http-client

之间的兔子队列

我的理解只是连接超时异常将被放回队列而任何其他异常或200将消息移动到下一个组件它是http-client | log.But当我尝试它时,所有异常都被放回http | http-client之间的队列。

现在我的用例是我想重试所有套接字时间/连接超时异常。任何其他系统异常50x错误我想写入日志或文件接收器?我怎样才能实现这一点。基本上取决于我要路由的异常重试和非重试异常。

1 个答案:

答案 0 :(得分:1)

只有2xx的结果会转到log

4xx5xx被视为错误。

您需要一个自定义http-client模块来捕获您认为“正常”的异常并将其转发到output频道。有点像...

<int:service-activator input-channel="input" ref="gw" />

<int:gateway request-channel="toHttp" error-channel="errors" />

<int:chain input-channel="errors" output-channel="output">
    <!-- examine payload.cause (http status code etc) and decide whether 
         to throw an exception or return the status code for sending to output -->
</int:chain>