我在Spring-Boot应用程序的控制器中具有以下内容:
@RequestMapping(method=RequestMethod.GET,value="/info") public DataModel getinfodata() { //this method runs some script which takes more than 3 minutes and sends the response back return run_xyz() }
在我的角度应用程序中,我有以下内容:
export class FetchService { private _url:string="/info"; constructor(private _http:Http) { } getData():any { return this._http.get(this._url).map((res:Response)=>res.json()). catch(this.errorHandler).subscribe(data=>console.log(data)); } errorHandler(error: Response){ console.error(error); return Observable.throw(error || "Server Error"); }
我目前面临的问题是Http get正在对服务器进行静默重试,结果,我昂贵的脚本被调用了3或4次。有没有一种方法,get它将仅使用0次重试发出单个请求并等待脚本完成,然后应将响应发送回去。我仅调用一次getData方法。 来自后端的响应 快照在端口8080上运行的Tomcat 快照正常情况下(脚本未运行 Angular CLI 最终响应189秒后)的服务器响应快照
get
最终,我弄清楚了为什么会发生这种情况。dev-server使用http-proxy-middleware package More Here,并且此软件包中提供的代理选项来自基础的http-proxy library http- proxy选项。其中之一是
http-proxy-middleware package
http-proxy library
proxyTimeout : 代理未收到响应的超时时间(以毫秒为单位)
proxyTimeout :
代理未收到响应的超时时间(以毫秒为单位)
如果服务器未能在规定的时间内(120秒)内响应,则默认值为〜120秒(基于我的观察)。"timeout":30000在代理配置文件中覆盖默认超时可以解决此问题。
"timeout":30000
{ "/info": { "target": { "host": "localhost", "protocol": "http:", "port": 8080 }, "secure": false, "changeOrigin": true, "logLevel": "debug", "timeout":30000 } }