track/src/TrackCenter.Application/Kafka/WarningSignalPublisher.cs
2025-07-12 17:03:21 +08:00

57 lines
1.9 KiB
C#

using Confluent.Kafka;
using Microsoft.Extensions.Configuration;
using TrackCenter.Application.Services.Warning.Signals;
using TrackCenter.Domain.Aggregates.TrackDetailsAggregate;
using Volo.Abp.DependencyInjection;
namespace TrackCenter.Application.Kafka;
/// <summary>
/// 预警信号发布者
/// </summary>
public sealed class WarningSignalPublisher : IDisposable, ISingletonDependency
{
private readonly IProducer<WarningSignalKey, WarningSignal> _producer;
private readonly IProducer<int, WarningSignal> _dlxProducer;
private readonly string env;
public WarningSignalPublisher(IProducer<WarningSignalKey, WarningSignal> producer, IProducer<int, WarningSignal> dlxProducer, IConfiguration conf)
{
_producer = producer;
_dlxProducer = dlxProducer;
env = "-" + conf.GetValue<string>("Environment")!.ToLower();
}
public void PublishSignal(WarningSignalType type, List<TrackDetailsIndex> tracks)
{
foreach (var track in tracks)
PublishSignal(type, track);
}
public void PublishSignal(WarningSignalType type, TrackDetailsIndex track)
{
_producer.Produce(GlobalConst.WarningKafkaTopic + env, new Message<WarningSignalKey, WarningSignal>
{
Key = new WarningSignalKey(type, track.OrderId),
Value = WarningSignal.FromTrack(track, type)
});
}
public Task PublishSignalAsync(Message<WarningSignalKey, WarningSignal> msg, CancellationToken ct = default)
{
return _producer.ProduceAsync(GlobalConst.WarningKafkaTopic + env, msg, ct);
}
public Task PublishDlxSignalAsync(Message<int, WarningSignal> message, CancellationToken ct = default)
{
return _dlxProducer.ProduceAsync(GlobalConst.WarningDLXKafkaTopic + env, message, ct);
}
public void Dispose()
{
_producer.Dispose();
_dlxProducer.Dispose();
}
}