Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
performance
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zry
performance
Commits
f43fa6b9
Commit
f43fa6b9
authored
May 24, 2021
by
lcx
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'hotfix/限流'
parents
05a00395
89e2611f
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
279 additions
and
23 deletions
+279
-23
performance/Performance.Api/Configurations/AppSettingConfig.cs
+26
-0
performance/Performance.Api/Configurations/AutoMapperConfig.cs
+18
-0
performance/Performance.Api/Configurations/DatabaseConfig.cs
+24
-0
performance/Performance.Api/Configurations/DependencyInjectionConfig.cs
+68
-0
performance/Performance.Api/Configurations/RateLimitConfig.cs
+38
-0
performance/Performance.Api/Configurations/SwaggerConfig.cs
+61
-0
performance/Performance.Api/GraphQLSchema/Extensions/GraphQLExtension.cs
+0
-4
performance/Performance.Api/Performance.Api.csproj
+1
-0
performance/Performance.Api/Program.cs
+6
-8
performance/Performance.Api/Properties/PublishProfiles/FolderProfile.pubxml
+8
-11
performance/Performance.Api/RateLimitConfig.json
+29
-0
performance/Performance.Api/Startup.cs
+0
-0
No files found.
performance/Performance.Api/Configurations/AppSettingConfig.cs
0 → 100644
View file @
f43fa6b9
using
Microsoft.Extensions.Configuration
;
using
Microsoft.Extensions.DependencyInjection
;
using
Performance.DtoModels.AppSettings
;
using
Performance.Infrastructure
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Threading.Tasks
;
namespace
Performance.Api.Configurations
{
public
static
class
AppSettingConfig
{
public
static
void
AddAppSettingConfiguration
(
this
IServiceCollection
services
,
IConfiguration
configuration
)
{
if
(
services
==
null
)
throw
new
ArgumentNullException
(
nameof
(
services
));
services
.
Configure
<
AppConnection
>(
configuration
.
GetSection
(
"AppConnection"
))
.
Configure
<
Application
>(
configuration
.
GetSection
(
"Application"
))
.
Configure
<
HuyiSmsConfig
>(
configuration
.
GetSection
(
"HuyiSmsConfig"
))
.
Configure
<
EmailOptions
>(
configuration
.
GetSection
(
"EmailOptions"
))
.
Configure
<
WebapiUrl
>(
configuration
.
GetSection
(
"WebapiUrl"
));
}
}
}
performance/Performance.Api/Configurations/AutoMapperConfig.cs
0 → 100644
View file @
f43fa6b9
using
AutoMapper
;
using
Microsoft.Extensions.DependencyInjection
;
using
Performance.DtoModels.AutoMapper
;
using
System
;
namespace
Performance.Api.Configurations
{
public
static
class
AutoMapperConfig
{
public
static
void
AddAutoMapperConfiguration
(
this
IServiceCollection
services
)
{
if
(
services
==
null
)
throw
new
ArgumentNullException
(
nameof
(
services
));
Mapper
.
Initialize
(
cfg
=>
cfg
.
AddProfile
<
AutoMapperConfigs
>());
services
.
AddAutoMapper
();
}
}
}
performance/Performance.Api/Configurations/DatabaseConfig.cs
0 → 100644
View file @
f43fa6b9
using
Microsoft.EntityFrameworkCore
;
using
Microsoft.Extensions.DependencyInjection
;
using
Microsoft.Extensions.Options
;
using
Performance.DtoModels.AppSettings
;
using
Performance.EntityModels
;
using
System
;
namespace
Performance.Api.Configurations
{
public
static
class
DatabaseConfig
{
public
static
void
AddDatabaseConfiguration
(
this
IServiceCollection
services
)
{
if
(
services
==
null
)
throw
new
ArgumentNullException
(
nameof
(
services
));
var
connection
=
services
.
BuildServiceProvider
().
GetService
<
IOptions
<
AppConnection
>>();
services
.
AddDbContext
<
PerformanceDbContext
>(
options
=>
{
options
.
UseMySQL
(
connection
.
Value
.
PerformanceConnectionString
);
});
}
}
}
performance/Performance.Api/Configurations/DependencyInjectionConfig.cs
0 → 100644
View file @
f43fa6b9
using
Microsoft.Extensions.DependencyInjection
;
using
Microsoft.Extensions.Options
;
using
Performance.Infrastructure
;
using
Performance.Services
;
using
Performance.Services.Queues
;
using
System
;
namespace
Performance.Api.Configurations
{
public
static
class
DependencyInjectionConfig
{
public
static
void
AddDependencyInjectionConfiguration
(
this
IServiceCollection
services
)
{
if
(
services
==
null
)
throw
new
ArgumentNullException
(
nameof
(
services
));
#
region
custom
util
//huyi短信发送注入
services
.
AddScoped
<
HuyiSmsNotify
>();
//用户身份信息服务
services
.
AddScoped
<
ClaimService
>();
#
endregion
custom
util
#
region
email
//阿里邮箱配置
var
emailOption
=
services
.
BuildServiceProvider
().
GetService
<
IOptions
<
EmailOptions
>>();
//邮件发送
services
.
AddEmailUtil
(
options
=>
{
options
.
Account
=
emailOption
.
Value
.
Account
;
options
.
Password
=
emailOption
.
Value
.
Password
;
options
.
SmtpServer
=
emailOption
.
Value
.
SmtpServer
;
});
#
endregion
email
#
region
redis
//var csredis = new CSRedis.CSRedisClient(connection.Value.RedisConnectionString);
//RedisHelper.Initialization(csredis);
#
endregion
redis
services
.
AddHostedService
<
QueuedHostedService
>();
services
.
AddSingleton
<
IBackgroundTaskQueue
,
BackgroundTaskQueue
>();
services
.
AddSingleton
<
IHubNotificationQueue
,
HubNotificationQueue
>();
services
.
AddPerformanceService
()
.
AddPerformanceRepoitory
();
}
}
#
region
hangfire
权限
public
class
HangfireAuthorizationFilter
:
Hangfire
.
Dashboard
.
IDashboardAuthorizationFilter
{
//这里需要配置权限规则
public
bool
Authorize
(
Hangfire
.
Dashboard
.
DashboardContext
context
)
{
return
true
;
}
}
#
endregion
hangfire
权限
}
performance/Performance.Api/Configurations/RateLimitConfig.cs
0 → 100644
View file @
f43fa6b9
using
AspNetCoreRateLimit
;
using
Microsoft.AspNetCore.Builder
;
using
Microsoft.AspNetCore.Http
;
using
Microsoft.Extensions.Configuration
;
using
Microsoft.Extensions.DependencyInjection
;
using
System
;
namespace
Performance.Api.Configurations
{
public
static
class
RateLimitConfig
{
public
static
void
AddRateLimitConfiguration
(
this
IServiceCollection
services
,
IConfiguration
configuration
)
{
if
(
services
==
null
)
throw
new
ArgumentNullException
(
nameof
(
services
));
//加载配置
services
.
AddOptions
();
//从appsettings.json获取相应配置
services
.
Configure
<
IpRateLimitOptions
>(
configuration
.
GetSection
(
"IpRateLimiting"
));
//注入计数器和规则存储
services
.
AddSingleton
<
IIpPolicyStore
,
MemoryCacheIpPolicyStore
>();
services
.
AddSingleton
<
IRateLimitCounterStore
,
MemoryCacheRateLimitCounterStore
>();
services
.
AddSingleton
<
IHttpContextAccessor
,
HttpContextAccessor
>();
//配置(计数器密钥生成器)
services
.
AddSingleton
<
IRateLimitConfiguration
,
RateLimitConfiguration
>();
}
public
static
void
UseRateLimitSetup
(
this
IApplicationBuilder
app
)
{
if
(
app
==
null
)
throw
new
ArgumentNullException
(
nameof
(
app
));
app
.
UseIpRateLimiting
();
}
}
}
performance/Performance.Api/Configurations/SwaggerConfig.cs
0 → 100644
View file @
f43fa6b9
using
Microsoft.AspNetCore.Builder
;
using
Microsoft.Extensions.Configuration
;
using
Microsoft.Extensions.DependencyInjection
;
using
Swashbuckle.AspNetCore.Swagger
;
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
namespace
Performance.Api.Configurations
{
public
static
class
SwaggerConfig
{
public
static
void
AddSwaggerConfiguration
(
this
IServiceCollection
services
)
{
if
(
services
==
null
)
throw
new
ArgumentNullException
(
nameof
(
services
));
services
.
AddSwaggerGen
(
c
=>
{
c
.
SwaggerDoc
(
"v1"
,
new
Info
{
Version
=
"v1.0"
,
Title
=
"绩效API接口"
});
//var xmlPath = new string[]
//{
// Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot", "Performance.Api.xml"),
// Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot", "Performance.DtoModels.xml"),
// Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot", "Performance.EntityModels.xml"),
//};
//foreach (var item in xmlPath)
//{
// c.IncludeXmlComments(item, true);
//}
var
xmlPathsss
=
Path
.
Combine
(
AppDomain
.
CurrentDomain
.
BaseDirectory
,
"wwwroot"
,
"Performance.Api.xml"
);
c
.
IncludeXmlComments
(
xmlPathsss
,
true
);
// Token绑定到ConfigureServices
var
security
=
new
Dictionary
<
string
,
IEnumerable
<
string
>>
{
{
"Performance API"
,
new
string
[]
{
}
},
};
c
.
AddSecurityRequirement
(
security
);
c
.
AddSecurityDefinition
(
"Performance API"
,
new
ApiKeyScheme
{
Description
=
"JWT授权(数据将在请求头中进行传输) 直接在下框中输入Bearer {token}(注意两者之间是一个空格)"
,
Name
=
"Authorization"
,
In
=
"HEADER"
});
});
}
public
static
void
UseSwaggerSetup
(
this
IApplicationBuilder
app
,
IConfiguration
configuration
)
{
if
(
app
==
null
)
throw
new
ArgumentNullException
(
nameof
(
app
));
app
.
UseSwagger
();
app
.
UseSwaggerUI
(
c
=>
{
c
.
SwaggerEndpoint
(
configuration
[
"Application:SwaggerEndpoint"
],
"v1.0"
);
c
.
RoutePrefix
=
string
.
Empty
;
});
}
}
}
performance/Performance.Api/GraphQLSchema/Extensions/GraphQLExtension.cs
View file @
f43fa6b9
using
GraphQL
;
using
GraphQL.Types
;
using
Microsoft.Extensions.DependencyInjection
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Threading.Tasks
;
namespace
Performance.Api
{
...
...
performance/Performance.Api/Performance.Api.csproj
View file @
f43fa6b9
...
...
@@ -36,6 +36,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AspNetCoreRateLimit" Version="3.0.3" />
<PackageReference Include="AutoMapper" Version="8.0.0" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="6.0.0" />
<PackageReference Include="CSRedisCore" Version="3.0.45" />
...
...
performance/Performance.Api/Program.cs
View file @
f43fa6b9
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Linq
;
using
System.Threading.Tasks
;
using
Microsoft.AspNetCore
;
using
Microsoft.AspNetCore
;
using
Microsoft.AspNetCore.Hosting
;
using
Microsoft.Extensions.Configuration
;
using
Microsoft.Extensions.Logging
;
using
NLog.Web
;
using
System
;
namespace
Performance.Api
{
...
...
@@ -23,6 +19,7 @@ public static void Main(string[] args)
catch
(
Exception
ex
)
{
logger
.
Error
(
ex
,
"Stopped program because of exception"
);
throw
;
}
finally
{
...
...
@@ -37,14 +34,15 @@ public static void Main(string[] args)
var
env
=
context
.
HostingEnvironment
;
config
.
AddJsonFile
(
"appsettings.json"
,
true
,
true
);
config
.
AddJsonFile
(
$"appsettings.
{
env
.
EnvironmentName
}
.json"
,
true
,
true
);
config
.
AddJsonFile
(
$"RateLimitConfig.json"
,
true
,
true
);
})
.
UseUrls
(
"http://*:5001"
)
.
UseStartup
<
Startup
>()
.
ConfigureLogging
(
logging
=>
{
logging
.
ClearProviders
();
logging
.
SetMinimumLevel
(
LogLevel
.
Trace
);
})
.
UseNLog
()
.
UseStartup
<
Startup
>();
.
UseNLog
();
}
}
performance/Performance.Api/Properties/PublishProfiles/FolderProfile.pubxml
View file @
f43fa6b9
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
此文件由 Web 项目的发布/打包过程使用。可以通过编辑此 MSBuild 文件
自定义此过程的行为。为了解与此相关的更多内容,请访问 https://go.microsoft.com/fwlink/?LinkID=208121。
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>
FileSystem
</WebPublishMethod>
<PublishProvider>
FileSystem
</PublishProvider>
<DeleteExistingFiles>True</DeleteExistingFiles>
<ExcludeApp_Data>False</ExcludeApp_Data>
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>bin\Release\netcoreapp2.2\publish\</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>
True
</LaunchSiteAfterPublish>
<ExcludeApp_Data>
False
</ExcludeApp_Data>
<TargetFramework>netcoreapp2.2</TargetFramework>
<ProjectGuid>3ae00ff5-f0ba-4d72-a23b-770186309327</ProjectGuid>
<SelfContained>false</SelfContained>
<_IsPortable>
true
</_IsPortable>
<publishUrl>
D:\publish\jx.suvalue.com2
</publishUrl>
<DeleteExistingFiles>
True
</DeleteExistingFiles>
</PropertyGroup>
</Project>
\ No newline at end of file
performance/Performance.Api/RateLimitConfig.json
0 → 100644
View file @
f43fa6b9
{
"IpRateLimiting"
:
{
//false则全局将应用限制,并且仅应用具有作为端点的规则*
。
true则限制将应用于每个端点,如
{
HTTP_Verb
}{
PATH
}
"EnableEndpointRateLimiting"
:
true
,
//false则拒绝的API调用不会添加到调用次数计数器上
"StackBlockedRequests"
:
false
,
//注意这个配置,表示获取用户端的真实IP,我们的线上经过负载后是
X-Forwarded-For,而测试服务器没有,所以是X-Real-IP
"RealIpHeader"
:
"X-Real-IP"
,
"ClientIdHeader"
:
"X-ClientId"
,
"HttpStatusCode"
:
200
,
"QuotaExceededResponse"
:
{
"Content"
:
"{{
\"
state
\"
:429,
\"
message
\"
:
\"
访问过于频繁,请稍后重试
\"
,
\"
data
\"
:null}}"
,
"ContentType"
:
"application/json"
,
"StatusCode"
:
200
},
//IP白名单,本地调试或者UAT环境,可以加入相应的IP,略过策略的限制
"IpWhitelist"
:
[],
//端点白名单,如果全局配置了访问策略,设置端点白名单相当于IP白名单一样,略过策略的限制
"EndpointWhitelist"
:
[],
"ClientWhitelist"
:
[],
"GeneralRules"
:
[
{
"Endpoint"
:
"*"
,
"Period"
:
"1s"
,
"Limit"
:
1
}
]
}
}
performance/Performance.Api/Startup.cs
View file @
f43fa6b9
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment