让 Spartacus 服务器端渲染引入 long API 调用超时机制的两种配置方法

简介: 让 Spartacus 服务器端渲染引入 long API 调用超时机制的两种配置方法

两种方法,使用 config.backend.timeout = { 浏览器:...,服务器:...} ,或者可以更具体地配置,即基于 Request 粒度,通过将 HTTP_TIMEOUT_CONFIG HttpContextToken 传递给 Angular HttpClient 的方法来针对每个具体请求进行配置。


在SSR(Node.js)中,超时处理耗时过长的外部http调用是一项尤为重要的改进,因为在Node.js中,与浏览器不同,Node.js 运行环境下并没有默认的外部http调用超时时间(浏览器通常会在长时间后超时长时间的http调用,例如1分钟)。


这种可配置的超时逻辑现在已经在Spartacus中的 Angular Http拦截器层面上实现。也就是说,在 Spartacus SSR long API timeout 功能发布之前,客户可以自己实现类似的逻辑,例如通过自己实现 Angular Http 拦截器来实现。


配置代码:


provideConfig({ 
  backend: { 
    timeout: { 
      server: 3_000,
      browser: 3_000
    }
  }
})



如何使用代理服务器制造后台 API 响应的延时效果

首先Install http-proxy tool:npm install -g http-proxy


然后开发一个 http-proxy.js server file


const httpProxy = require('http-proxy');
const http = require('http');
const proxy = httpProxy.createProxyServer({ secure: false });
const ENDPOINT_FOR_DELAY = 'consenttemplates';
const BACKEND_BASE_URL = 'https://jerry:9002';
const DELAY = 3000; // 手动硬编码的延时
/** custom predicate, whether we should delay a request */
const shouldDelay = (req) => {
  // Note: In browser there are 2 requests: preflight (OPTIONS) and actual request (GET).
  const result = req.url.includes(ENDPOINT_FOR_DELAY);
  result && console.log({ delay: DELAY, url: req.url, method: req.method });
  return result;
};
http
  .createServer(function (req, res) {
    const forwardRequest = () =>
      proxy.web(req, res, { target: BACKEND_BASE_URL });
    const delay = shouldDelay(req) ? DELAY : 0;
    setTimeout(forwardRequest, delay);
  })
  .listen(9002);

然后启动这个代理服务器:node http-proxy.js


最后在 .env-cmdrc 里指定环境变量 CX_BASE_URL:


"dev": {
    "CX_BASE_URL": "http://localhost:9002"
  },



针对某个具体请求设置 timeout:

import { HTTP_TIMEOUT_CONFIG, HttpTimeoutConfig } from `@spartacus/core`;
/* ... */
return this.httpClient.get('/some/api', {
  context: new HttpContext().set(
    HTTP_TIMEOUT_CONFIG, 
    { server: 15_000 } // value in milliseconds 
  )
})


当超时真的发生之后,可以在 console 看到下列的警告消息:


Request to URL ‘${request.url}’ exceeded expected time of ${timeoutValue}ms and was aborted.


总之,对于在 NodeJS 中运行的服务器端渲染应用程序的稳定性来说,为每个传出的 http 调用设置一个明确的超时时间是至关重要的。 否则,如果后端 API 响应非常慢(或从不响应),服务器端呈现的应用程序将等待响应很长时间(或永远)。 在这种情况下,为该应用程序分配的内存不会被释放,这会引起内存泄漏问题。



相关文章
|
13天前
|
机器学习/深度学习 人工智能 API
人工智能平台PAI产品使用合集之机器学习PAI-EAS部署好后,服务的公网API和URL怎么配置
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
1月前
|
API
getmail邮箱API发送邮件怎么配置
getmail是一款强大的邮箱客户端,支持通过API发送邮件。要使用AokSend的邮箱API,需遵循以下步骤:1) 安装getmail;2) 获取API密钥;3) 配置getmail的配置文件,添加API密钥信息;4) 使用getmail发送测试邮件;5) 验证邮件是否成功发送。AokSend提供稳定高效的邮件发送服务,包括SMTP/API接口和触发式发信。确保安全,记得定期更新API密钥。
|
1月前
|
API 前端开发 JavaScript
Spartacus 中 saved cart 的 occ API 请求
Spartacus 中 saved cart 的 occ API 请求
17 0
Spartacus 中 saved cart 的 occ API 请求
|
1月前
|
监控 API 开发者
邮件发送API接口配置步骤?
`邮件发送API让开发者轻松集成邮件功能。选择服务提供商如SendGrid、Mailgun或AWS SES,注册获取API密钥。配置发件人、收件人、主题和内容,调用API发送邮件。处理响应以确认发送成功,并监控性能进行优化。API简化了邮件发送,提升开发效率。`
|
2月前
|
Java API Maven
email api java编辑方法?一文教你学会配置步骤
在Java开发中,Email API是简化邮件功能的关键工具。本文指导如何配置和使用Email API Java:首先,在项目中添加javax.mail-api和javax.mail依赖;接着,配置SMTP服务器和端口;然后,创建邮件,设定收件人、发件人、主题和正文;最后,使用Transport.send()发送邮件。借助Email API Java,可为应用添加高效邮件功能。
|
2月前
|
安全 API 数据安全/隐私保护
email api接口配置教程步骤详解
Email API是用于程序化访问邮件服务的工具,让开发者能集成邮件功能到应用中。配置Email API包括选择供应商(如SendGrid、Mailgun、AokSend),注册获取API密钥,配置API参数,及测试邮件发送。使用Email API能提升邮件发送的可靠性和效率,便于邮件管理及营销活动。AokSend支持大量验证码发送,适合高效邮件运营。
|
2月前
|
分布式计算 资源调度 DataWorks
dataworks常见问题之数据服务api返回超时如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
31 2
|
3月前
|
存储 关系型数据库 API
Python 任务自动化工具:nox 的配置与 API
Python 任务自动化工具:nox 的配置与 API
24 0
|
3月前
|
消息中间件 缓存 Java
Kafka Consumer java api 配置
Kafka Consumer java api 配置
|
4月前
|
供应链 数据挖掘 API
和 SAP 系统单点登录 MYSAPSSO2 相关的一些配置和 API
和 SAP 系统单点登录 MYSAPSSO2 相关的一些配置和 API
30 0