如何解决如何强制服务在Web API中运行
我有一个Web api项目。在services.cs类中,我要求它运行2个服务,然后只有它才能启动程序。
所以我的Web api会点击一个外部链接,如果该链接断开,则我的服务将无法启动,因为代码是内置在其中的,并且会不断尝试直到该链接建立。
现在,我需要一种机制,即使外部链接断开,我也希望服务启动并继续尝试运行该类,直到链接建立,但程序应该启动。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(ConfigureControllers)
.AddJsonoptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null; // use PascalCase
options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
});
services.AddHostedService<WorkerClassA>();
services.AddHostedService<WorkerClassB>();
}
工作者类a中的代码:
public WorkerClassA(IServiceScopeFactory scopeFactory,ILogger<WorkerClassA> logger,CacheRefreshConfig cacheRefreshConfig)
{
_scopeFactory = scopeFactory;
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_cacheRefreshConfig = cacheRefreshConfig;
}
public override Task StopAsync(CancellationToken cancellationToken)
{
_logger.Loginformation("iLevel Refresh cache background service is stopped.");
return base.StopAsync(cancellationToken);
}
public override async Task StartAsync(CancellationToken cancellationToken)
{
_logger.Loginformation("iLevel Refresh cache background service has started.");
await RefreshCache();
await base.StartAsync(cancellationToken);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await Task.Delay(AppSettings.Current.CacheRefreshDelay,stoppingToken);
await RefreshCache();
}
}
public async Task RefreshCache()
{
try
{
using var scope = _scopeFactory.CreateScope();
var cache = scope.ServiceProvider.GetService<CacheService>();
await referenceDataService.LoadReferenceDataFromexternallink();
_logger.Loginformation("Cache refreshed successfully");
return;
}
catch (Exception ex)
{
if (isExceptionLogEnabled)
{
_logger.LogError(ex,"Failed to refresh cache");
isExceptionLogEnabled = false;
}
await Task.Delay(TimeSpan.FromSeconds(1));
}
}
所以,即使程序尝试打到Worker类A中的外部链接,并且如果程序无法尝试,它仍会继续尝试,该如何启动程序。我希望它启动程序,然后继续尝试启动该服务。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。