-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathProgram.cs
More file actions
104 lines (87 loc) · 3.69 KB
/
Copy pathProgram.cs
File metadata and controls
104 lines (87 loc) · 3.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using Serilog;
using GrpcService.Models;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using GrpcService.Api;
using GrpcService.Infrastructure;
using StackExchange.Redis;
var builder = WebApplication.CreateBuilder(args);
// Redis 配置
builder.Services.AddSingleton<IConnectionMultiplexer>(sp =>
{
var redisConn = builder.Configuration.GetConnectionString("Redis");
return ConnectionMultiplexer.Connect(redisConn!);
});
builder.Services.AddSingleton<RedisService>();
// 常量提取
const int DefaultRetainedFileCountLimit = 30;
const int DefaultMaxReceiveMessageSize = 4194304;
const int DefaultMaxSendMessageSize = 4194304;
const int DefaultGrpcPort = 5000;
const int DefaultMaxConcurrentCalls = 100;
const string DefaultHost = "0.0.0.0";
const string LogDir = "logs";
const string LogFilePattern = ".log";
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Configuration)
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.File(
path: Path.Combine(LogDir, LogFilePattern),
rollingInterval: RollingInterval.Day,
retainedFileCountLimit: DefaultRetainedFileCountLimit,
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] {SourceContext}: {Message}{NewLine}{Exception}")
.CreateLogger();
builder.Host.UseSerilog();
builder.Services.Configure<GrpcServerConfiguration>(
builder.Configuration.GetSection("GrpcServer"));
builder.Services.Configure<HikDeviceConfiguration>(
builder.Configuration.GetSection("HikDevice"));
builder.Services.AddGrpc(options =>
{
var grpcConfig = builder.Configuration.GetSection("GrpcServer").Get<GrpcServerConfiguration>();
options.MaxReceiveMessageSize = grpcConfig?.MaxReceiveMessageSize ?? DefaultMaxReceiveMessageSize;
options.MaxSendMessageSize = grpcConfig?.MaxSendMessageSize ?? DefaultMaxSendMessageSize;
});
builder.Services.AddSingleton<DeviceLoggerService>();
builder.Services.AddSingleton<IDeviceLoggerService>(provider => provider.GetRequiredService<DeviceLoggerService>());
builder.Services.AddSingleton<TenantConcurrencyManager>();
builder.Services.AddSingleton<TenantAwareDeviceManager>();
//builder.Services.AddSingleton<GrpcRequestQueueService>();
builder.Services.AddSingleton<DeviceManager>();
builder.Services.AddSingleton<CMSService>();
builder.WebHost.ConfigureKestrel((context, serverOptions) =>
{
var grpcConfig = context.Configuration.GetSection("GrpcServer").Get<GrpcServerConfiguration>();
var host = grpcConfig?.Host ?? DefaultHost;
var port = grpcConfig?.Port ?? DefaultGrpcPort;
serverOptions.Listen(System.Net.IPAddress.Parse(host), port, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http2;
});
serverOptions.Limits.MaxConcurrentConnections = grpcConfig?.MaxConcurrentCalls ?? DefaultMaxConcurrentCalls;
serverOptions.Limits.MaxConcurrentUpgradedConnections = grpcConfig?.MaxConcurrentCalls ?? DefaultMaxConcurrentCalls;
});
builder.Services.AddHostedService(provider => provider.GetRequiredService<CMSService>());
builder.Services.AddHostedService<GrpcRequestQueueService>();
builder.Services.AddHostedService<WhiteListWorker>();
builder.Services.AddHostedService<RetryWorker>();
var app = builder.Build();
app.UseRouting();
app.MapGrpcService<HkDeviceService>();
try
{
Log.Information("正在启动海康设备gRPC服务...");
var grpcConfig = app.Configuration.GetSection("GrpcServer").Get<GrpcServerConfiguration>();
var host = grpcConfig?.Host ?? DefaultHost;
var port = grpcConfig?.Port ?? DefaultGrpcPort;
Log.Information("gRPC服务地址: {Host}:{Port}", host, port);
app.Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "海康设备gRPC服务启动失败");
}
finally
{
Log.CloseAndFlush();
}