В моем приложении C# есть несколько именованных HttpClients. Я привязываю политики Polly (а именно, автоматический выключатель) к каждому из них.
Мне нужно зафиксировать, какой HttpClient отключил цепь в обратном вызове OnOpened, чтобы я мог сообщить об этом вызывающий абонент сообщает, что ClientX не работает.
Я вижу, что в OnCircuitOpenedArguments есть свойство OperationKey, и я думаю, что это то, что мне нужно, но я не могу понять, как его заполнить.
Примечание: я использую Polly v8 и Microsoft.Extensions.Http.Resilience.
Вот код, который у меня есть на данный момент:
В моей настройке DI
{
services
.AddHttpClient("ClientA")
.AddResilienceHandler("ClientA", (builder, context) =>
{
var strategyFactory = context.ServiceProvider.GetRequiredService();
builder.AddPipeline(strategyFactory.Create());
});
services
.AddHttpClient("ClientB")
.AddResilienceHandler("ClientB", (builder, context) =>
{
var strategyFactory = context.ServiceProvider.GetRequiredService();
builder.AddPipeline(strategyFactory.Create());
});
}
Вызванный выше фабричный метод
public ResiliencePipeline Create()
{
var builder = new ResiliencePipelineBuilder()
.AddTimeout(MapToTimeoutStrategyOptions())
.AddCircuitBreaker(MapToHttpCircuitBreakerStrategyOptions())
.AddRetry(MapToServiceNowHttpRetryStrategyOptions());
}
Определение автоматического выключателя
private HttpCircuitBreakerStrategyOptions MapToHttpCircuitBreakerStrategyOptions() =>
new()
{
MinimumThroughput = resiliencyConfig.CircuitBreakerConfig.Throughput,
FailureRatio = resiliencyConfig.CircuitBreakerConfig.FailureRatio,
SamplingDuration = TimeSpan.FromSeconds(resiliencyConfig.CircuitBreakerConfig.SamplingDuration),
BreakDuration = TimeSpan.FromSeconds(resiliencyConfig.CircuitBreakerConfig.DurationOfBreakSeconds),
OnClosed = args =>
{
//Signal that ClientX is back up
},
OnOpened = args =>
{
//Signal that ClientX is down
}
};
Подробнее здесь: https://stackoverflow.com/questions/792 ... d-callback
Определение того, какой автоматический выключатель Polly сработал в обратном вызове OnOpened ⇐ C#
Место общения программистов C#
1733403479
Anonymous
В моем приложении C# есть несколько именованных HttpClients. Я привязываю политики Polly (а именно, автоматический выключатель) к каждому из них.
Мне нужно зафиксировать, какой HttpClient отключил цепь в обратном вызове OnOpened, чтобы я мог сообщить об этом вызывающий абонент сообщает, что ClientX не работает.
Я вижу, что в OnCircuitOpenedArguments есть свойство OperationKey, и я думаю, что это то, что мне нужно, но я не могу понять, как его заполнить.
Примечание: я использую Polly v8 и Microsoft.Extensions.Http.Resilience.
Вот код, который у меня есть на данный момент:
В моей настройке DI
{
services
.AddHttpClient("ClientA")
.AddResilienceHandler("ClientA", (builder, context) =>
{
var strategyFactory = context.ServiceProvider.GetRequiredService();
builder.AddPipeline(strategyFactory.Create());
});
services
.AddHttpClient("ClientB")
.AddResilienceHandler("ClientB", (builder, context) =>
{
var strategyFactory = context.ServiceProvider.GetRequiredService();
builder.AddPipeline(strategyFactory.Create());
});
}
Вызванный выше фабричный метод
public ResiliencePipeline Create()
{
var builder = new ResiliencePipelineBuilder()
.AddTimeout(MapToTimeoutStrategyOptions())
.AddCircuitBreaker(MapToHttpCircuitBreakerStrategyOptions())
.AddRetry(MapToServiceNowHttpRetryStrategyOptions());
}
Определение автоматического выключателя
private HttpCircuitBreakerStrategyOptions MapToHttpCircuitBreakerStrategyOptions() =>
new()
{
MinimumThroughput = resiliencyConfig.CircuitBreakerConfig.Throughput,
FailureRatio = resiliencyConfig.CircuitBreakerConfig.FailureRatio,
SamplingDuration = TimeSpan.FromSeconds(resiliencyConfig.CircuitBreakerConfig.SamplingDuration),
BreakDuration = TimeSpan.FromSeconds(resiliencyConfig.CircuitBreakerConfig.DurationOfBreakSeconds),
OnClosed = args =>
{
//Signal that ClientX is back up
},
OnOpened = args =>
{
//Signal that ClientX is down
}
};
Подробнее здесь: [url]https://stackoverflow.com/questions/79252107/identifying-which-polly-circuit-breaker-tripped-in-the-onopened-callback[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия