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; /// /// 预警信号发布者 /// public sealed class WarningSignalPublisher : IDisposable, ISingletonDependency { private readonly IProducer _producer; private readonly IProducer _dlxProducer; private readonly string env; public WarningSignalPublisher(IProducer producer, IProducer dlxProducer, IConfiguration conf) { _producer = producer; _dlxProducer = dlxProducer; env = "-" + conf.GetValue("Environment")!.ToLower(); } public void PublishSignal(WarningSignalType type, List tracks) { foreach (var track in tracks) PublishSignal(type, track); } public void PublishSignal(WarningSignalType type, TrackDetailsIndex track) { _producer.Produce(GlobalConst.WarningKafkaTopic + env, new Message { Key = new WarningSignalKey(type, track.OrderId), Value = WarningSignal.FromTrack(track, type) }); } public Task PublishSignalAsync(Message msg, CancellationToken ct = default) { return _producer.ProduceAsync(GlobalConst.WarningKafkaTopic + env, msg, ct); } public Task PublishDlxSignalAsync(Message message, CancellationToken ct = default) { return _dlxProducer.ProduceAsync(GlobalConst.WarningDLXKafkaTopic + env, message, ct); } public void Dispose() { _producer.Dispose(); _dlxProducer.Dispose(); } }