我有http出站网关将json消息发布到休息服务,现在其余的将以json消息类型的http错误状态响应,以防我们的应用程序应该捕获任何错误。在快乐场景中,将json消息发布到该休息服务并获得http成功状态和json消息也应该通过我们的应用程序捕获。
现在我通过spring集成实现了什么,我能够发送消息并获得成功响应并捕获它但是在错误状态下弹出行为它会抛出异常我该如何改变行为?
如果有超时,如何重试?
<出站网关配置下的
<int-http:outbound-gateway request-channel="aggregatorChannel" reply-channel="responseChannel" charset="UTF-8"
url="http://localhost:8090/receiveGateway" http-method="POST" reply-timeout="180000">
<int-http:request-handler-advice-chain >
<int:retry-advice max-attempts="5" recovery-channel="aggregatorChannel" >
<int:exponential-back-off initial="1000" multiplier="5.0" maximum="600000" />
</int:retry-advice>
</int-http:request-handler-advice-chain>
</int-http:outbound-gateway>
以上配置将重试错误消息,我不想重试该消息,如果只有超时,我想重试。
答案 0 :(得分:3)
您希望将行为更改为(当出现错误时)?
如果您手动将RetryTemplate
连接到重试拦截器,<bean/>
,则可以在RetryPolicy
中指定哪些例外可以重试。
修改强>
目前还不完全清楚你要做什么,但也许这会指出你正确的方向......
<int-http:outbound-gateway request-channel="requestChannel"
url="http://localhost:8080/http/receiveGateway"
http-method="POST"
request-factory="requestFactory"
expected-response-type="java.lang.String">
<int-http:request-handler-advice-chain >
<int:retry-advice max-attempts="5" recovery-channel="foo">
<int:exponential-back-off initial="1000" multiplier="1.1" maximum="600000" />
</int:retry-advice>
<bean class="foo.MyExceptionAdvice" />
</int-http:request-handler-advice-chain>
</int-http:outbound-gateway>
<bean id="requestFactory" class="org.springframework.http.client.SimpleClientHttpRequestFactory">
<property name="connectTimeout" value="5000"/>
<property name="readTimeout" value="5000"/>
</bean>
如果自定义异常建议引发异常,则将重试该消息并最终将其发送到恢复通道。如果自定义建议消耗错误,则它可以发送返回值。我简单地说了this gist。