track/src/TrackCenter.Application/TrackCenterApplicationModule.cs
xiaolipro 5c7829bdbd
All checks were successful
Build and Deploy / deploy (push) Successful in 54s
feat: fake up
2026-10-27 16:32:14 +08:00

124 lines
5.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Diagnostics;
using System.Net;
using Fake;
using Fake.Messaging;
using Fake.Messaging.RabbitMQ;
using Fake.Modularity;
using Fake.ObjectMapping.AutoMapper;
using Fake.ObjectStorage;
using FreeRedis;
using Hangfire;
using Hangfire.Redis.StackExchange;
using InterfaceForward.Domain.Shared.Helpers;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using TrackCenter.Application.HostServices;
using TrackCenter.Application.Kafka;
using TrackCenter.Application.Messaging;
using TrackCenter.Application.Options;
namespace TrackCenter.Application;
[DependsOn(typeof(FakeObjectMappingAutoMapperModule))]
[DependsOn(typeof(FakeMessagingRabbitMqModule))]
[DependsOn(typeof(FakeObjectStorageTencentCosModule))]
[DependsOn(typeof(TrackCenterDomainModule))]
public class TrackCenterApplicationModule : FakeModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
context.Services.Configure<FakeAutoMapperOptions>(options =>
{
options.ScanProfiles<TrackCenterApplicationModule>();
});
// Messaging:独立队列;PrefetchCount=0 → ProcessorCount;接口通可按 TrackApp:TrackRefreshFetchCount 覆盖
context.Services.Configure<MessagingOptions>(configuration.GetSection(MessagingOptions.SectionName));
context.Services.Configure<RabbitMessageOptions>(o =>
{
configuration.GetSection(RabbitMessageOptions.SectionName).Bind(o);
var refreshFetch = configuration.GetValue<ushort>("TrackApp:TrackRefreshFetchCount");
if (refreshFetch > 0)
{
o.Handlers[nameof(TrackRefreshEventHandler)] =
new RabbitMessageHandlerOptions { PrefetchCount = refreshFetch };
o.Handlers[nameof(TrackPushCompletedEventHandler)] =
new RabbitMessageHandlerOptions { PrefetchCount = refreshFetch };
}
});
var redisOptions = configuration.GetSection("Redis").Get<ConnectionStringBuilder>();
if (redisOptions == null)
throw new FakeException("未找到Redis相关配置,请检查配置文件中是否包含名为Redis的节点");
RedisHelper.Init(redisOptions, showLogInfo: Debugger.IsAttached);
context.Services.Configure<TrackAppOptions>(configuration.GetSection("TrackApp"));
context.Services.Configure<InterfaceRelayParamsConfigOptions>(
configuration.GetSection("InterfaceRelayParamsConfig"));
var connectionString = $"{configuration["Redis:Host"]}" +
$",password={configuration["Redis:Password"]}" +
$",defaultDatabase={configuration["Redis:Database"]}" +
$",abortConnect=false";
// 注册预警计算服务
context.Services.AddWarningCalcServices(configuration);
// 注册预警任务后台服务
context.Services.AddHostedService<WarningTaskComponentHostedService>();
// 注册飞书服务(用于预警通知)
context.Services.AddFeishuNetSdk(o =>
{
o.AppId = configuration.GetValue<string>("FeiShu:AppId")!;
o.AppSecret = configuration.GetValue<string>("FeiShu:AppSecret")!;
o.EnableLogging = configuration.GetValue<bool>("FeiShu:EnableLogging");
});
// 注册HangFire服务
context.Services.Configure<TrackWarningTaskOptions>(configuration.GetSection("WarningTask"));
context.Services.AddHangfire(o =>
{
var options = new RedisStorageOptions
{
Prefix = $"{GlobalConst.TrackHangfireKeyPrefix}:",
Db = int.Parse(configuration["Redis:Database"]!),
};
o.UseRedisStorage(connectionString, options)
.WithJobExpirationTimeout(TimeSpan.FromHours(1)); // 终止态任务只保留1小时
});
var hangfireWorkerCount = configuration.GetValue<int>("TrackApp:HangfireWorkerCount");
if (hangfireWorkerCount <= 0)
{
hangfireWorkerCount = Math.Max(4, Environment.ProcessorCount);
}
context.Services.AddHangfireServer(o =>
{
// 索引越小优先级越高
o.Queues =
[
GlobalConst.WarningJobQueueLevel0,
GlobalConst.WarningJobQueueLevel1,
GlobalConst.WarningJobQueueLevel2,
"default"
];
o.ServerName = Dns.GetHostName();
o.ShutdownTimeout = TimeSpan.FromSeconds(10);
o.WorkerCount = hangfireWorkerCount;
});
// 注册轨迹业务定时任务服务
context.Services.AddHostedService<TrackTaskComponentHostedService>();
context.Services.AddHttpClient("itfx", client =>
{
client.Timeout = TimeSpan.FromSeconds(20);
client.BaseAddress = new Uri(configuration["TrackApp:ItfxBaseAddress"]!);
});
}
}