我有一个带有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错误我想写入日志或文件接收器?我怎样才能实现这一点。基本上取决于我要路由的异常重试和非重试异常。
答案 0 :(得分:1)
只有2xx的结果会转到log
。
4xx
和5xx
被视为错误。
您需要一个自定义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>