using YLErp.Modules.SwapModule; namespace YLErp.Web.App.KafkaTask { public class TrsExchangeTradeConsumerKafkaTask : IHostedService, IDisposable { private readonly IYcLogger _logger; private readonly CancellationTokenSource _cts = new CancellationTokenSource(); private KafkaConsumerHelper _exchangeTradeConsumer;//对冲交易消费者 private string exchangeTradeTopic = string.Empty; private string exchangeTradeTopicGroupId = string.Empty; public TrsExchangeTradeConsumerKafkaTask() { _logger = LogFactory.GetLogger("TrsExchangeTradeConsumerKafkaTask"); exchangeTradeTopic = Environment.GetEnvironmentVariable("KafkaConfig_TrsExchangeTradeConsumerTopic"); exchangeTradeTopicGroupId = Environment.GetEnvironmentVariable("KafkaConfig_TrsExchangeTradeConsumerTopicGroupId"); _exchangeTradeConsumer = new KafkaConsumerHelper(exchangeTradeTopicGroupId, exchangeTradeTopic); } public void Dispose() { _cts.Dispose(); } public Task StartAsync(CancellationToken cancellationToken) { _logger.Info("TrsExchangeTradeConsumerKafkaTask started"); Task.Run(() => ExecuteTask(_cts.Token), _cts.Token); return Task.CompletedTask; } public async Task StopAsync(CancellationToken cancellationToken) { _cts.Cancel(); await Task.CompletedTask; } private async Task ExecuteTask(CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { try { await Task.Run(() => { new SwapConsumerService(OptUserInfo.SystemUser).ConsumerTrsExchangeTradeResp(_exchangeTradeConsumer, "TRS同步"); }, cancellationToken); } catch (Exception ex) { _logger.Error("TrsExchangeTradeConsumerKafkaTask Exception", ex); } } } } }