57 lines
1.9 KiB
C#
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();
|
|
}
|
|
}
|