我使用它是@MessagingGateway
为了在spring-mvc
@Controller
和之间架起桥梁spring-integration
。该@MessagingGateway
声明如下所示:
package a.b.c;
import org.springframework.integration.annotation.*;
import org.springframework.stereotype.Component;
@MessagingGateway(name="inboundGateway" defaultRequestTimeout="2000"
defaultReplyTimeout="2000")
@Component
public interace InboundGateway {
@Gateway(requestChannel = "getSomething")
Message<SomeValue> getSomething(@Headers Map<String, Object> headers);
}
这是从控制器引用的
@Controller
@RequestMapping("/some/base/path")
public class SomeController {
private final InboundGateway inboundGateway;
public SomeController(InboundGateway inboundGateway) {
this.inboundGateway = inboundGateway;
}
@GetMapping(value = "things", produces = { "application/json" })
public ResponseEntity<SomeValue> getSomething(RequestContext<String> requestContext) {
Message<SomeValue> response = inboundGateway.getSomething(requestContext);
....
}
我认为如果在指定时间内没有返回响应,defaultRequestTimeout
和 的定义defaultReplyTimeout
会引发超时。inboundGateway
然而,我发现该方法中使用的时间getSomething()
可能超过指定的时间,在本例中为 2 秒。看来2秒是作为调用下游系统的超时时间,而不是作为返回的超时时间getSomething()
。
我的理解正确吗?是否有一些简单的、声明性的方法来管理该inboundGateway
级别的超时?任何指示表示赞赏。