121 lines
4.3 KiB
C#
121 lines
4.3 KiB
C#
using IRaCIS.Core.API.HostService;
|
|
using IRaCIS.Core.Application.MassTransit.Consumer;
|
|
using IRaCIS.Core.Domain.BaseModel;
|
|
using IRaCIS.Core.Infra.EFCore;
|
|
using MassTransit;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using System;
|
|
|
|
namespace IRaCIS.Core.API
|
|
{
|
|
public static class MassTransitSetup
|
|
{
|
|
public static void AddMassTransitSetup(this IServiceCollection services)
|
|
{
|
|
|
|
#region MassTransit
|
|
//masstransit组件 也支持MediatR 中介者模式,但是支持分布式,考虑后续,所以在次替代MediatR
|
|
//参考链接:https://masstransit.io/documentation/concepts/mediator#scoped-mediator
|
|
services.AddMediator(cfg =>
|
|
{
|
|
cfg.AddConsumers(typeof(UserSiteSurveySubmitedEventConsumer).Assembly);
|
|
|
|
//cfg.AddConsumer<ConsistencyCheckConsumer>();
|
|
//cfg.AddConsumer<AddSubjectTriggerConsumer>();
|
|
//cfg.AddConsumer<AddSubjectTriggerConsumer2>();
|
|
//cfg.ConfigureMediator((context, cfg) => cfg.UseHttpContextScopeFilter(context));
|
|
});
|
|
|
|
//添加 MassTransit 和 InMemory 传输
|
|
services.AddMassTransit(cfg =>
|
|
{
|
|
cfg.AddConsumers(typeof(UserSiteSurveySubmitedEventConsumer).Assembly);
|
|
|
|
cfg.AddPublishMessageScheduler();
|
|
cfg.AddHangfireConsumers();
|
|
|
|
// 使用 InMemory 作为消息传递机制
|
|
cfg.UsingInMemory((context, cfg) =>
|
|
{
|
|
cfg.UsePublishMessageScheduler();
|
|
|
|
|
|
cfg.UseConsumeFilter(typeof(ConsumeExceptionFilter<>), context,
|
|
x => x.Include(type => type.IsAssignableTo(typeof(DomainEvent))));
|
|
|
|
cfg.UseConsumeFilter(typeof(CultureInfoFilter<>), context,
|
|
x => x.Include(type => type.IsAssignableTo(typeof(DomainEvent))));
|
|
|
|
cfg.ConfigureEndpoints(context); // 自动配置所有消费者的端点
|
|
|
|
|
|
});
|
|
|
|
#region rabitmq obsolute
|
|
|
|
//cfg.UsingRabbitMq((context, cfg) =>
|
|
//{
|
|
// cfg.UsePublishMessageScheduler();
|
|
|
|
// cfg.Host(
|
|
// host: "106.14.89.110",
|
|
// port: 5672,
|
|
// virtualHost: "/",
|
|
// configure: hostConfig =>
|
|
// {
|
|
// hostConfig.Username("rabbitmq");
|
|
// hostConfig.Password("rabbitmq");
|
|
// });
|
|
|
|
// cfg.ConfigureEndpoints(context);
|
|
//});
|
|
#endregion
|
|
|
|
#region Outbox obsolute
|
|
|
|
//cfg.AddConfigureEndpointsCallback((context, name, cfg) =>
|
|
//{
|
|
// cfg.UseEntityFrameworkOutbox<IRaCISDBContext>(context);
|
|
|
|
// //cfg.UseDelayedRedelivery(r => r.Intervals(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(15), TimeSpan.FromMinutes(30)));
|
|
|
|
// //// 全局重试策略:重试 3 次,每次延迟 5 秒
|
|
// //cfg.UseMessageRetry(retryConfig =>
|
|
// //{
|
|
// // retryConfig.Interval(3, TimeSpan.FromSeconds(10));
|
|
// //});
|
|
//});
|
|
|
|
//cfg.AddEntityFrameworkOutbox<IRaCISDBContext>(o =>
|
|
//{
|
|
// o.UseSqlServer();
|
|
// o.UseBusOutbox();
|
|
//});
|
|
|
|
#endregion
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
//services.AddOptions<MassTransitHostOptions>()
|
|
// .Configure(options =>
|
|
// {
|
|
// options.WaitUntilStarted = true;
|
|
// options.StartTimeout = TimeSpan.FromMinutes(1);
|
|
// options.StopTimeout = TimeSpan.FromMinutes(1);
|
|
// });
|
|
|
|
//services.AddOptions<HostOptions>()
|
|
// .Configure(options => options.ShutdownTimeout = TimeSpan.FromMinutes(1));
|
|
|
|
//services.AddHostedService<RecurringJobConfigurationService>();
|
|
#endregion
|
|
|
|
|
|
}
|
|
}
|
|
}
|