1. 新增数据库唯一约束和Message_Outbox表脚本 2. 新增雪花ID、Hangfire存储、MQ重试等配置实体 3. 重构各项目雪花ID生成逻辑,改为从配置读取WorkerId 4. 优化积分服务分页查询、用户背包更新逻辑 5. 新增JWT令牌Redis过期刷新逻辑 6. 完善RabbitMQ死信队列消息头信息 7. 新增可靠MQ消息发布服务和Outbox派发后台服务 8. 替换原有RabbitMQ直接发送为Outbox可靠发布 9. 优化签到服务逻辑,新增重复签到校验和补签卡扣减逻辑 10. 修复自动铺码消费逻辑,新增点阵页预占和释放机制
75 lines
2.7 KiB
C#
75 lines
2.7 KiB
C#
using QYZH.InteractiveMagazine.Infrastructure.RabbitMQ;
|
|
using QYZH.InteractiveMagazine.Infrastructure.Redis;
|
|
using QYZH.InteractiveMagazine.Infrastructure.SDK;
|
|
using QYZH.InteractiveMagazine.Models.Settings;
|
|
using QYZH.InteractiveMagazine.PrintWorker.Consumers;
|
|
using Serilog;
|
|
using SqlSugar;
|
|
using SqlSugar.IOC;
|
|
using System.Text;
|
|
using Yitter.IdGenerator;
|
|
|
|
Directory.SetCurrentDirectory(AppContext.BaseDirectory);
|
|
|
|
var builder = Host.CreateApplicationBuilder(new HostApplicationBuilderSettings
|
|
{
|
|
Args = args,
|
|
ContentRootPath = AppContext.BaseDirectory
|
|
});
|
|
const string serviceName = "QYZH.InteractiveMagazine.PrintWorker";
|
|
|
|
builder.Configuration
|
|
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
|
|
.AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true, reloadOnChange: true);
|
|
|
|
var logDirectory = Path.Combine(AppContext.BaseDirectory, "logs");
|
|
Directory.CreateDirectory(logDirectory);
|
|
var logFilePath = Path.Combine(logDirectory, "printworker-log-.txt");
|
|
|
|
Log.Logger = new LoggerConfiguration()
|
|
.ReadFrom.Configuration(builder.Configuration)
|
|
.WriteTo.File(logFilePath, rollingInterval: RollingInterval.Day, encoding: Encoding.UTF8)
|
|
.Enrich.FromLogContext()
|
|
.CreateLogger();
|
|
|
|
builder.Services.AddSerilog();
|
|
builder.Services.AddWindowsService(options => options.ServiceName = serviceName);
|
|
|
|
var snowflakeSettings = builder.Configuration.GetSection("SnowflakeSettings").Get<SnowflakeSettings>() ?? new SnowflakeSettings { WorkerId = 3 };
|
|
YitIdHelper.SetIdGenerator(new IdGeneratorOptions { WorkerId = snowflakeSettings.WorkerId });
|
|
|
|
builder.Services.AddSqlSugar(new IocConfig
|
|
{
|
|
ConfigId = 0,
|
|
DbType = IocDbType.MySql,
|
|
ConnectionString = builder.Configuration.GetConnectionString("DefaultConnection"),
|
|
IsAutoCloseConnection = true
|
|
});
|
|
|
|
SugarIocServices.ConfigurationSugar(db =>
|
|
{
|
|
db.Aop.OnLogExecuting = (sql, pars) =>
|
|
{
|
|
Log.Information("[SQL] {Sql}", UtilMethods.GetSqlString((DbType)IocDbType.MySql, sql, pars));
|
|
};
|
|
db.Aop.OnError = ex =>
|
|
{
|
|
Log.Error(ex, "[SQL Error] {Message}", ex.Message);
|
|
};
|
|
});
|
|
|
|
builder.Services.AddScoped<ISqlSugarClient>(_ => DbScoped.SugarScope);
|
|
builder.Services.AddCSRedisCacheExtension(builder.Configuration.GetSection("RedisSettings"));
|
|
builder.Services.AddHttpClient();
|
|
builder.Services.AddSDKService(builder.Configuration);
|
|
builder.Services.AddRabbitMQ(builder.Configuration);
|
|
|
|
builder.Services.AddScoped<IQueueConsumer, AutoDotCodeConsumer>();
|
|
builder.Services.AddHostedService<RabbitMQHostedService>();
|
|
|
|
var app = builder.Build();
|
|
|
|
Log.Information("{ServiceName} 已启动,仅消费自动铺码队列", serviceName);
|
|
|
|
await app.RunAsync();
|