我正在构建我的 API,并且成功地捕获了我在路由周围设置的中间件上的一些错误,如下所示:
Route::group(['middleware' => \App\Http\Middleware\ExceptionHandlerMiddleware::class], function() {
Route::resource('/address', 'AddressController');
Route::resource('/country', 'CountryController');
Route::resource('/phone', 'PhoneController');
Route::resource('/user', 'UserController');
});
Run Code Online (Sandbox Code Playgroud)
中间件设法捕获以下异常:
Illuminate\Database\Eloquent\ModelNotFoundExceptionIlluminate\Validation\ValidationExceptionException这太棒了。我还知道控制路线中尝试次数的节流机制。因此,我通过邮递员攻击了我的路线http://localhost:8000/api/user,直到出现错误too many attemp。
异常在位于以下位置的文件中引发:
/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php
Run Code Online (Sandbox Code Playgroud)
由于这个论坛主题,我还设法获得了它抛出的异常类型:Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException。
所以最后我的中间件看起来像这样:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException;
use Exception;
class ExceptionHandlerMiddleware
{
public function handle($request, Closure $next)
{
$output = $next($request);
try {
if( ! is_null( $output->exception ) ) {
throw new $output->exception;
}
return $output;
}
catch( TooManyRequestsHttpException $e ) { …Run Code Online (Sandbox Code Playgroud) 尝试为队列实现速率限制以每秒运行一项作业,该作业向外部 API 发出 HTTP 请求并加载一种类型的数据。
但不知道如何称呼这份工作,尝试了不同的选择但没有奏效。在示例中:
Redis::throttle('key')->allow(10)->every(60)->then(function () {
// Job logic...
}, function () {
// Could not obtain lock...
return $this->release(10);
});
Run Code Online (Sandbox Code Playgroud)
将在// Job logic...调度队列中放入什么并且此代码将在队列类中?以及如何命名key?我的队列名称是loader.
有什么帮助吗?
如何在测试设置中重写 'user': '5/分钟' on 'user': '2/day'
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_RATES': {
'user': '5/minute'
}
}
Run Code Online (Sandbox Code Playgroud)
我如何使用@override_settings或带有上下文管理的mb来做到这一点?我只需要在一个测试中应用这个,我不能重写整个字典
def test_mytest(self):
value = settings.REST_FRAMEWORK
value['DEFAULT_THROTTLE_RATES'] = {'user':'2/day'}
data1 = {}
data2 = {}
data3 = {}
with self.settings(REST_FRAMEWORK=value):
resp1 = self.client.post(self.url, data1, format='json')
resp2 = self.client.post(self.url, data1, format='json')
resp3 = self.client.post(self.url, data1, format='json')
assert resp3.status_code == 429, resp3.data
Run Code Online (Sandbox Code Playgroud)
但是没有429错误,虽然值已经改变了
我在使用油门时遇到问题。使用下面的代码,油门正常工作。但是,当我取消注释时出了点问题setPosition([e.clientX, e.clientY])。油门坏了,position不用等1秒,立即更新。
import React, { useState } from 'react'
import { throttle } from 'lodash'
export default () => {
const [position, setPosition] = useState([0, 0])
const [x, y] = position
const handleMouseMoveThrottle = throttle(e => {
console.log(e.clientX, e.clientY)
// setPosition([e.clientX, e.clientY])
}, 1000)
const handleMouseMove = e => {
e.persist()
handleMouseMoveThrottle(e)
}
return (
<div
style={{ width: 300, height: 300, border: 'solid 1px black' }}
onMouseMove={handleMouseMove}
>
<div>
Position: {x}, {y}
</div>
</div>
)
} …Run Code Online (Sandbox Code Playgroud) 我使用 Laravel 速率限制(节流)。我想知道它在哪里存储节流数据以及如何将默认存储系统更改为 MySQL/Mariadb 或 Redis?
通常,当我们收到来自 MongoDB 的关于 CPU 高使用率的警报(如下所示)时,我们需要执行哪些检查/操作?
**系统:CPU(用户)% 已超过 95
CPU 使用率已耗尽可用资源,并且可能很快就会受到限制。确保没有索引丢失并扩大规模。请导航至系统 CPU 指标页面以查看使用情况详细信息。**
是否有可用于下载限制的Perl模块?我想下载某个文件,但将下载速率限制为特定的KB /秒数.
我的用户需要非常高的节流阀,所以他们可以使用很多系统.是否有一种简单的方法可以让它们比其他用户更高的节流?
我环顾四周但没找到任何东西.
如果我有一个文本字段,并且在该文本字段中进行了更改,那么我会调用一个函数,该函数会调用一个API,如何限制它,因此仅当用户在1秒钟内未键入任何内容时,它才会调用该函数?
我在这里迷路了..任何帮助都超过了欢迎。
我目前正在尝试使用S3静态网站,API Gateway和AWS Lambda设计无服务器应用程序。我想将此网站公开,所以每个用户没有API密钥。
我想防止将这些端点滥用到非常低的水平,例如给定的公共IP每5秒发出1个请求。
AWS Shield或其中任何一种服务都可能吗?
throttling ×10
laravel ×3
django ×2
php ×2
api ×1
aws-lambda ×1
cpu-usage ×1
dart ×1
download ×1
flutter ×1
laravel-5 ×1
laravel-6.2 ×1
middleware ×1
mongodb ×1
performance ×1
perl ×1
queue ×1
react-hooks ×1
reactjs ×1
redis ×1
textfield ×1