原子化请求
type
server hook
alova@3.4.0+
atomize策略可用于确保多进程环境中的请求原子性。
特性
- 确保多进程环境中的请求原子性;
- 可自定义锁通道、超时时间和重试间隔;
使用
基本用法
const { atomize } = require('alova/server');
const { alovaInstance } = require('./api');
const res = await atomize(alovaInstance.Get('/api/user'));
默认情况下,atomize使用通道名'default',超时时间为5000ms,重试间隔为100ms。
自定义锁通道
可以指定自定义通道名或通道名数组进行锁定,不同的通道互不影响。
const hookedMethod = atomize(request, {
// 设置自定义通道名
channel: 'user_lock'
// 或多个通道
// channel: ['user_lock', 'order_lock']
});
自定义超时时间和间隔
可以调整获取锁的超时时间和重试间隔。
const hookedMethod = atomize(request, {
// 设置超时时间为10秒
timeout: 10000,
// 设置重试间隔为200ms
interval: 200
});
错误处理
如果在指定超时时间内无法获取锁,将抛出错误。
try {
const response = await atomize(request);
} catch (error) {
console.error('获取锁失败:', error.message);
}
注意事项
- 此策略需要使用
@alova/storage-redis或@alova/storage-file作为alova实例的l2Cache。@alova/storage-redis内部使用@sesamecare-oss/redlock实现分布式锁,可前往redis存储适配器查看redlock的配置方法。@alova/storage-file内部使用proper-lockfile实现基于文件的锁,可前往file存储适配器查看proper-lockfile的配置方法。
- 确保请求完成后释放锁,避免死锁。
alova使用调查,花3分钟填下,求你了!
alova用在项目里了吗?快来告诉我